From 700ad34eb10c8abbdcd2782bd6419b577814aca5 Mon Sep 17 00:00:00 2001 From: Max Barbare Date: Sun, 26 Jul 2026 01:44:06 -0400 Subject: [PATCH] feat: Introduce macOS app v0.1.0 (#2762) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(desktop): scaffold Tauri 2 macOS shell with empty window * feat(desktop): server store, URL normalization, and health-check helpers * feat(desktop): IPC commands for server list/add/remove/health + active-server state Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * feat(desktop): native onboarding server picker with health check and remembered servers * feat(desktop): vibrancy background, overlay titlebar, and inset traffic lights * feat(desktop): native menu bar with standard shortcuts and menu events * feat(desktop): webview→Rust bridge with native notifications * fix(desktop): gate bridge injection on PageLoadEvent::Finished Prevents double-injecting the bridge IIFE (once on Started, once on Finished), which was duplicating every native notification. * feat(desktop): Dock badge driven by webview attention count * feat(desktop): launch-at-login autostart commands * feat(desktop): sure:// deep link scheme with parse tests and navigation * feat(desktop): preferences window with server switcher and launch-at-login * docs(desktop): README for dev, release, signing/notarization, and deferred widget * fix(desktop): remove dead New Window menu item * fix(desktop): correct login route to /sessions/new Rails uses `resources :sessions` (plural), so the login page is /sessions/new, not the /session/new the plan assumed. Fixes an immediate 404 when connecting to a server. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * feat(desktop): Sure-styled onboarding, draggable titlebar, and app content offset - Restyle onboarding + prefs to match Sure's auth page: solid surface background, centered logomark, .form-field-style inputs, inverse primary button; theme-aware via prefers-color-scheme (design-system tokens). - Add a draggable titlebar strip on bundled pages and inject one into the remote page so the window drags from the top everywhere. - Inject a top offset on the logged-in app-layout root so the sidebar logo clears the macOS traffic lights. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * fix(desktop): de-dupe login navigation to prevent CSRF token/session race connect() navigated to /sessions/new directly AND via the active-server-changed event, which is also handled by a second listener injected into the page by bridge.js. One connect fired multiple concurrent GET /sessions/new requests, each minting a fresh session + CSRF token; the form shown and the _sure_session finally stored could come from different GETs, so the login POST failed 'Can't verify CSRF token authenticity' intermittently. Route all navigation through a single window-level guard so only the first request per server wins. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * fix(desktop): enable window drag permission; offset only the icon rail - Add core:window:allow-start-dragging (+ show/set-focus, event emit/listen) to capabilities so data-tauri-drag-region actually drags the window on macOS. - Offset only the 84px left icon rail (logomark) to clear the traffic lights instead of pushing the entire app-layout down; keep main content full-height. - Drag strip z-index lowered below Sure's sticky headers so its controls stay clickable. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * feat(desktop): persist active server and resume session on launch - Persist the active server to the Keychain in set_active_server; active_server falls back to it so a relaunch knows where to go. - On launch, auto-resume straight to the last server instead of showing the picker every time. - Navigate to the server root (not /sessions/new): Rails serves the dashboard when the session cookie is still valid, or redirects to login when not — so a persisted session no longer forces a re-login. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * feat: desktop SSO via system browser with PKCE code exchange Passkeys/WebAuthn don't work in an embedded WKWebView, so SSO now runs in the system browser and hands a session back to the app securely. Server (Rails): - GET /auth/desktop/:provider — stashes a PKCE S256 challenge, hands off to OmniAuth (reusing the mobile auto-submit form). Passkeys work (real browser). - openid_connect — for a linked identity in a desktop flow, mints a single-use, 2-min, PKCE-bound one-time code and redirects to sure://sso/callback?code=... (unlinked identities are sent back with an error). - GET /sessions/desktop_exchange — verifies the code + PKCE verifier (secure_compare), single-use (cache delete), then create_session_for; MFA is enforced at exchange time. Sets the normal web session cookie in the webview. - Tests: happy path + single-use, wrong-verifier rejection, missing challenge. Desktop (Tauri): - start_sso command: generates PKCE, opens the browser, stores the verifier. - sure://sso/callback deep link -> webview navigates to desktop_exchange with the verifier (never sent through the deep link, so an intercepted code is useless). - bridge.ts intercepts SSO provider form submits and routes them to start_sso; password login stays in the webview. - remote.json capability: minimal IPC (drag, event bridge, prefs window, start_sso) for the remote Sure origin — no fs/shell/http. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * fix(desktop): correct remote IPC capability + handle menu in Rust + drag fallback Root cause of prefs/switch-server/SSO/drag doing nothing on the logged-in page: the remote-bridge capability's remote.urls ('https://*') did not match the server origin, so all IPC (event listen, invoke, drag command) was denied. Per Tauri v2, window.__TAURI__ is injected on remote pages only with withGlobalTauri (set) AND a matching remote.urls; patterns need a path wildcard. - remote.json: urls -> https://*/**, http://*/** (+ bare host) so any server origin matches. - menu.rs: Preferences and Switch Server now show the prefs window directly in Rust (no dependency on remote-page IPC); Switch Server moved from Window to the App menu. - bridge.ts: drops the menu-event listeners (Rust owns them), adds a startDragging mousedown fallback for the drag strip, logs diagnostics, and reports start_sso success/failure to the console. - main.ts: drops the now-unused menu listeners. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * fix(desktop): SSO via event (remote can't invoke commands), disk-backed server store Diagnostics confirmed window.__TAURI__ + IPC work on the remote page, but a remote origin cannot invoke custom commands ('start_sso not allowed. Plugin not found'). Events are permitted, so SSO now goes through an event. - SSO: bridge emits 'sure://start-sso'; Rust listens and runs begin_sso (opens the system browser). start_sso command kept for local use. - servers: mirror the server list + active server to a JSON file in Application Support as a fallback — Keychain items don't persist for unsigned builds, which was wiping the saved server on relaunch. - remote.json: add notification:default (Sure's PWA was requesting it and erroring). - menu: log whether the prefs window is present when Preferences/Switch Server fire, to diagnose the no-op. - main: log the persisted active server on boot. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * fix(desktop): drag the top band on every page via mousedown, not a z-indexed strip The fixed drag strip sat below Sure's sticky headers (z-10) so it worked only on pages without a top header. Replace it with a document-level mousedown in the top ~34px that starts a window drag unless the target is an interactive element — so dragging works on all pages, Sure's titlebar controls stay clickable, and main content isn't pushed down. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * ci(desktop): tag-triggered GitHub Actions release for universal unsigned .dmg - .github/workflows/desktop-release.yml: on a 'desktop-v*' tag, build the universal (Apple Silicon + Intel) .dmg on a macOS runner via tauri-action and publish it to a GitHub Release with unsigned-install instructions. - README: universal build command, the tag-based release process, and the Gatekeeper 'Open Anyway' / xattr steps for end users. - Drop the unused iOS/Android icon sets (macOS build only needs icon.icns). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * ci(desktop): rolling desktop-latest build on desktop/ changes, not manual tags Replaces the manual desktop-v* tag release with a path-filtered workflow that builds only when desktop/ changes on main and publishes to a single rolling 'desktop-latest' prerelease with a stable Sure.dmg filename — one permanent download URL, and the file changes only when the desktop code does. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * ci(desktop): tag-driven versioned releases; tag is the single source of version Revert to manual version tags (desktop-v*) for explicit version control, but derive the app/.dmg version from the tag so package.json + tauri.conf.json are synced automatically in CI — no manual version-file edits. Each tag produces its own versioned GitHub Release with the universal unsigned .dmg. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * ci(desktop): release entirely from GitHub via workflow_dispatch version input Make the GitHub Action the single tool to version + deploy the desktop app: Run workflow -> enter a version -> it syncs the version, builds the universal unsigned .dmg, and creates the desktop-v tag + Release. Refuses to re-release an existing version; marks pre-release versions accordingly. Tag push (desktop-v*) still works as a secondary trigger. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * ci(desktop): publish releases with make_latest:false so they don't hijack the repo's Latest badge Desktop is a secondary artifact, not the main product. Build with tauri-action, then publish via action-gh-release with make_latest:false so the repo's 'Latest release' badge stays on the main app's v* release. Separate desktop-v* tag namespace already keeps it out of the v* publish workflow. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * fix(desktop): address PR review feedback (security + correctness) Security: - workflow: pass workflow_dispatch version via env (no shell injection); pin all third-party actions to commit SHAs. - SSO: gate deep-link navigation and begin_sso to servers the user has saved (is_known_server), so a rogue page/deep link can't drive them. - desktop_exchange is now POST (verifier in body, not URL/logs); CSRF skipped since the single-use PKCE code is the protection. - desktop_sso_start validates the code_challenge is a 43-char base64url digest. - desktop_exchange claims the one-time code atomically (delete-and-check) to close the read/delete TOCTOU. - failure: return desktop SSO errors to the app via sure://sso/callback?error. Correctness / stability: - prefs window hides on close instead of being destroyed, so the menu can reopen it. - servers.rs: on-disk store is authoritative (file-first read), atomic writes (temp + rename). - main.ts/prefs.ts: try/catch around add/set/remove/active_server and boot; add a shared serverErrorMessage helper (no duplicated substring checks). - vite.config.ts: derive dir from import.meta.url (ESM has no __dirname). - bridge.ts: coalesce MutationObserver scans to one per frame. - README: notarization example uses the universal .dmg name. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * fix(desktop): scope remote IPC to server origins at runtime, drop wildcard capability Resolves the remaining security finding: the static remote.json granted Tauri IPC to any http(s) origin (https://*). Remove it and instead add a capability scoped to each server's exact origin at runtime (CapabilityBuilder + add_capability), granting only the minimal permissions the bridge needs, for saved/active servers on startup and for the target in set_active_server. No origin outside the user's configured servers can access IPC. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * fix(desktop): add runtime per-origin IPC capability (grant_server_capability) Implements the runtime-scoped capability that replaces the removed wildcard remote.json: CapabilityBuilder scoped to each server's exact origin, added via add_capability for saved/active servers at startup and in set_active_server. (Split from the previous commit, which only recorded the remote.json removal.) Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * ci(desktop): harden release workflow (no shared caches, environment gate) Address two release-workflow security findings: - Remove cache: npm and the swatinem/rust-cache step so a poisoned Actions cache written by another workflow can't flow into a published .dmg (P0). - Add 'environment: release' to the build job so publishing can require manual approval and scope secrets to release runs (P1). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Nno38ujctqiqSoY8eFRhaf * fix(desktop): remove transparency code and fix relaunch behavior * fix(desktop): fix PR review findings; adjust app notarization path, use Sure theme tokens instead of hardcoding values * ci(desktop): switch release from independant versioning to using Sure's publishing workflow, releasing and versioning with every main app release * fix(desktop): restrict CSP as much as possible while maintaining functionality; allow bundled scripts, Tauri IPC, inline styles; deny wildcards --------- Co-authored-by: Claude Opus 4.8 --- .github/workflows/desktop-release.yml | 82 + .github/workflows/publish.yml | 20 +- app/controllers/sessions_controller.rb | 124 +- config/routes.rb | 5 + desktop/.gitignore | 4 + desktop/README.md | 85 + desktop/index.html | 38 + desktop/package-lock.json | 1263 ++++ desktop/package.json | 22 + desktop/prefs.html | 30 + desktop/src-tauri/Cargo.lock | 5646 +++++++++++++++++ desktop/src-tauri/Cargo.toml | 29 + desktop/src-tauri/build.rs | 10 + desktop/src-tauri/capabilities/default.json | 19 + desktop/src-tauri/icons/128x128.png | Bin 0 -> 8944 bytes desktop/src-tauri/icons/128x128@2x.png | Bin 0 -> 18706 bytes desktop/src-tauri/icons/32x32.png | Bin 0 -> 2181 bytes desktop/src-tauri/icons/64x64.png | Bin 0 -> 4496 bytes desktop/src-tauri/icons/Square107x107Logo.png | Bin 0 -> 7443 bytes desktop/src-tauri/icons/Square142x142Logo.png | Bin 0 -> 10157 bytes desktop/src-tauri/icons/Square150x150Logo.png | Bin 0 -> 10624 bytes desktop/src-tauri/icons/Square284x284Logo.png | Bin 0 -> 20620 bytes desktop/src-tauri/icons/Square30x30Logo.png | Bin 0 -> 1988 bytes desktop/src-tauri/icons/Square310x310Logo.png | Bin 0 -> 22563 bytes desktop/src-tauri/icons/Square44x44Logo.png | Bin 0 -> 3038 bytes desktop/src-tauri/icons/Square71x71Logo.png | Bin 0 -> 5015 bytes desktop/src-tauri/icons/Square89x89Logo.png | Bin 0 -> 6339 bytes desktop/src-tauri/icons/StoreLogo.png | Bin 0 -> 3513 bytes desktop/src-tauri/icons/icon.icns | Bin 0 -> 179578 bytes desktop/src-tauri/icons/icon.ico | Bin 0 -> 32268 bytes desktop/src-tauri/icons/icon.png | Bin 0 -> 38811 bytes desktop/src-tauri/src/badge.rs | 27 + desktop/src-tauri/src/commands.rs | 137 + desktop/src-tauri/src/deep_link.rs | 52 + desktop/src-tauri/src/lib.rs | 151 + desktop/src-tauri/src/main.rs | 5 + desktop/src-tauri/src/menu.rs | 90 + desktop/src-tauri/src/notifications.rs | 23 + desktop/src-tauri/src/servers.rs | 174 + desktop/src-tauri/src/sso.rs | 20 + desktop/src-tauri/src/state.rs | 18 + desktop/src-tauri/src/window.rs | 16 + desktop/src-tauri/tauri.conf.json | 54 + desktop/src-tauri/tests/config_test.rs | 19 + desktop/src-tauri/tests/deep_link_test.rs | 44 + desktop/src-tauri/tests/servers_test.rs | 33 + desktop/src/assets/logomark.svg | 6 + desktop/src/bridge.ts | 136 + desktop/src/main.ts | 113 + desktop/src/prefs.ts | 70 + desktop/src/status.ts | 8 + desktop/src/strings.ts | 19 + desktop/src/styles.css | 181 + desktop/tsconfig.json | 12 + desktop/vite.config.ts | 28 + test/controllers/sessions_controller_test.rb | 71 + 56 files changed, 8881 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/desktop-release.yml create mode 100644 desktop/.gitignore create mode 100644 desktop/README.md create mode 100644 desktop/index.html create mode 100644 desktop/package-lock.json create mode 100644 desktop/package.json create mode 100644 desktop/prefs.html create mode 100644 desktop/src-tauri/Cargo.lock create mode 100644 desktop/src-tauri/Cargo.toml create mode 100644 desktop/src-tauri/build.rs create mode 100644 desktop/src-tauri/capabilities/default.json create mode 100644 desktop/src-tauri/icons/128x128.png create mode 100644 desktop/src-tauri/icons/128x128@2x.png create mode 100644 desktop/src-tauri/icons/32x32.png create mode 100644 desktop/src-tauri/icons/64x64.png create mode 100644 desktop/src-tauri/icons/Square107x107Logo.png create mode 100644 desktop/src-tauri/icons/Square142x142Logo.png create mode 100644 desktop/src-tauri/icons/Square150x150Logo.png create mode 100644 desktop/src-tauri/icons/Square284x284Logo.png create mode 100644 desktop/src-tauri/icons/Square30x30Logo.png create mode 100644 desktop/src-tauri/icons/Square310x310Logo.png create mode 100644 desktop/src-tauri/icons/Square44x44Logo.png create mode 100644 desktop/src-tauri/icons/Square71x71Logo.png create mode 100644 desktop/src-tauri/icons/Square89x89Logo.png create mode 100644 desktop/src-tauri/icons/StoreLogo.png create mode 100644 desktop/src-tauri/icons/icon.icns create mode 100644 desktop/src-tauri/icons/icon.ico create mode 100644 desktop/src-tauri/icons/icon.png create mode 100644 desktop/src-tauri/src/badge.rs create mode 100644 desktop/src-tauri/src/commands.rs create mode 100644 desktop/src-tauri/src/deep_link.rs create mode 100644 desktop/src-tauri/src/lib.rs create mode 100644 desktop/src-tauri/src/main.rs create mode 100644 desktop/src-tauri/src/menu.rs create mode 100644 desktop/src-tauri/src/notifications.rs create mode 100644 desktop/src-tauri/src/servers.rs create mode 100644 desktop/src-tauri/src/sso.rs create mode 100644 desktop/src-tauri/src/state.rs create mode 100644 desktop/src-tauri/src/window.rs create mode 100644 desktop/src-tauri/tauri.conf.json create mode 100644 desktop/src-tauri/tests/config_test.rs create mode 100644 desktop/src-tauri/tests/deep_link_test.rs create mode 100644 desktop/src-tauri/tests/servers_test.rs create mode 100644 desktop/src/assets/logomark.svg create mode 100644 desktop/src/bridge.ts create mode 100644 desktop/src/main.ts create mode 100644 desktop/src/prefs.ts create mode 100644 desktop/src/status.ts create mode 100644 desktop/src/strings.ts create mode 100644 desktop/src/styles.css create mode 100644 desktop/tsconfig.json create mode 100644 desktop/vite.config.ts diff --git a/.github/workflows/desktop-release.yml b/.github/workflows/desktop-release.yml new file mode 100644 index 000000000..222ecf164 --- /dev/null +++ b/.github/workflows/desktop-release.yml @@ -0,0 +1,82 @@ +name: Desktop Build + +# Build the macOS desktop app as part of the normal Sure release. The caller +# supplies the v* release ref, so desktop versions cannot diverge independently. +on: + workflow_call: + +permissions: + contents: read + +jobs: + build: + name: Build macOS Desktop App + runs-on: macos-latest # Apple Silicon runner; cross-builds the x86_64 slice + timeout-minutes: 30 + steps: + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + persist-credentials: false + + - name: Resolve and verify release version + id: ver + shell: bash + run: | + set -euo pipefail + VERSION="$(tr -d '[:space:]' < .sure-version)" + TAG_VERSION="${GITHUB_REF_NAME#v}" + + if [ -z "$VERSION" ]; then + echo "::error::.sure-version is empty or unreadable" + exit 1 + fi + if [ "$VERSION" != "$TAG_VERSION" ]; then + echo "::error::.sure-version ($VERSION) does not match release tag (v$TAG_VERSION)" + exit 1 + fi + echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$' \ + || { echo "::error::invalid version '$VERSION'"; exit 1; } + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + - name: Stamp desktop version for the build + env: + VERSION: ${{ steps.ver.outputs.version }} + run: | + set -euo pipefail + npm version "$VERSION" --no-git-tag-version --allow-same-version --prefix desktop + tmp="$(mktemp)" + jq --arg v "$VERSION" '.version = $v' desktop/src-tauri/tauri.conf.json > "$tmp" + mv "$tmp" desktop/src-tauri/tauri.conf.json + perl -0pi -e 's/(^version = ").*?(")/$1$ENV{VERSION}$2/m' desktop/src-tauri/Cargo.toml + perl -0pi -e 's/(name = "sure-desktop"\nversion = ").*?(")/$1$ENV{VERSION}$2/' desktop/src-tauri/Cargo.lock + + # No dependency/build caches on the release workflow: a poisoned Actions + # cache written by another workflow must never flow into a published .dmg. + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 20 + + - uses: dtolnay/rust-toolchain@4cda84d5c5c54efe2404f9d843567869ab1699d4 # stable + with: + targets: aarch64-apple-darwin,x86_64-apple-darwin + + - name: Install frontend dependencies + working-directory: desktop + run: npm ci + + - name: Build universal unsigned DMG + uses: tauri-apps/tauri-action@84b9d35b5fc46c1e45415bdb6144030364f7ebc5 # v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + projectPath: desktop + includeUpdaterJson: false + args: --target universal-apple-darwin + + - name: Upload desktop DMG + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + with: + name: desktop-release-dmg + path: desktop/src-tauri/target/universal-apple-darwin/release/bundle/dmg/*.dmg + if-no-files-found: error + retention-days: 1 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4a07c57e9..6a93d58f1 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -265,10 +265,16 @@ jobs: uses: ./.github/workflows/flutter-build.yml secrets: inherit + desktop: + name: Build macOS Desktop App + if: startsWith(github.ref, 'refs/tags/v') + uses: ./.github/workflows/desktop-release.yml + secrets: inherit + release: name: Create GitHub Release if: startsWith(github.ref, 'refs/tags/v') - needs: [merge, mobile, helm] + needs: [merge, mobile, desktop, helm] runs-on: ubuntu-latest timeout-minutes: 10 @@ -294,6 +300,12 @@ jobs: name: helm-chart-package path: ${{ runner.temp }}/helm-artifacts + - name: Download desktop DMG artifact + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + with: + name: desktop-release-dmg + path: ${{ runner.temp }}/desktop-artifacts + - name: Prepare release assets env: REF_NAME: ${{ github.ref_name }} @@ -338,6 +350,12 @@ jobs: echo "✓ Helm chart package prepared" fi + # Copy the universal macOS desktop build. + if compgen -G "${{ runner.temp }}/desktop-artifacts/*.dmg" > /dev/null; then + cp ${{ runner.temp }}/desktop-artifacts/*.dmg "${{ runner.temp }}/release-assets/" + echo "✓ Desktop DMG prepared" + fi + echo "Release assets:" ls -la "${{ runner.temp }}/release-assets/" diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index ea2f37c08..7db6d098f 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -2,7 +2,11 @@ class SessionsController < ApplicationController extend SslConfigurable before_action :set_session, only: :destroy - skip_authentication only: %i[index new create openid_connect failure post_logout mobile_sso_start] + skip_authentication only: %i[index new create openid_connect failure post_logout mobile_sso_start desktop_sso_start desktop_exchange] + # The desktop exchange is a cross-context POST from the app's webview that + # can't carry a CSRF token; the single-use, PKCE-bound one-time code is the + # protection instead (same model as the OAuth callback). + skip_forgery_protection only: :desktop_exchange layout "auth" @@ -13,8 +17,9 @@ class SessionsController < ApplicationController def new store_pending_invitation_if_valid - # Clear any stale mobile SSO session flag from an abandoned mobile flow + # Clear any stale mobile/desktop SSO session flag from an abandoned flow session.delete(:mobile_sso) + session.delete(:desktop_sso) begin demo = Rails.application.config_for(:demo) @@ -142,6 +147,75 @@ class SessionsController < ApplicationController render layout: false end + # Entry point for desktop-app SSO, opened in the system browser so passkeys + # work. Stashes the desktop PKCE challenge, then hands off to OmniAuth exactly + # like the mobile flow (reusing its auto-submitting form). + def desktop_sso_start + provider = params[:provider].to_s + configured_providers = Rails.configuration.x.auth.sso_providers.map { |p| p[:name].to_s } + + unless configured_providers.include?(provider) + redirect_to new_session_path, alert: t("sessions.openid_connect.failed") + return + end + + code_challenge = params[:code_challenge].to_s + # Require a well-formed PKCE (S256) challenge — a 43-char base64url SHA-256 + # digest — so the one-time code returned via the custom URL scheme can only + # be redeemed by the app instance that started the flow (it alone holds the + # verifier). Validate the format before copying it into session state. + unless code_challenge.match?(/\A[A-Za-z0-9_-]{43}\z/) + redirect_to new_session_path, alert: t("sessions.openid_connect.failed") + return + end + + session[:desktop_sso] = { code_challenge: code_challenge } + @provider = provider + render :mobile_sso_start, layout: false + end + + # Exchanges the single-use, PKCE-bound code (delivered to the desktop app via + # sure://sso/callback) for a real web session in the app's own webview. + def desktop_exchange + code = params[:code].to_s + code_verifier = params[:code_verifier].to_s + + cache_key = "desktop_sso:#{code}" + data = Rails.cache.read(cache_key) + # Atomically claim the code: only the request whose delete actually removes + # the entry may proceed, so two concurrent exchanges can't both succeed + # (delete returns false for the loser). Redis/MemoryStore both report this. + claimed = Rails.cache.delete(cache_key) + + if code.blank? || code_verifier.blank? || data.blank? || !claimed + redirect_to new_session_path, alert: t("sessions.openid_connect.failed") + return + end + + data = data.with_indifferent_access + expected_challenge = Base64.urlsafe_encode64(Digest::SHA256.digest(code_verifier), padding: false) + + unless ActiveSupport::SecurityUtils.secure_compare(expected_challenge, data[:code_challenge].to_s) + redirect_to new_session_path, alert: t("sessions.openid_connect.failed") + return + end + + user = User.find_by(id: data[:user_id]) + unless user + redirect_to new_session_path, alert: t("sessions.openid_connect.failed") + return + end + + if user.otp_required? + session[:mfa_user_id] = user.id + redirect_to verify_mfa_path + else + @session = create_session_for(user) + flash[:notice] = t("invitations.accept_choice.joined_household") if accept_pending_invitation_for(user) + redirect_to root_path + end + end + def openid_connect auth = request.env["omniauth.auth"] @@ -174,6 +248,14 @@ class SessionsController < ApplicationController return end + # Desktop SSO: hand a single-use, PKCE-bound code back to the desktop app, + # which exchanges it for a normal web session. MFA is enforced later, at + # exchange time (the desktop webview can complete MFA), so it is supported. + if session[:desktop_sso].present? + handle_desktop_sso_callback(user) + return + end + # Store id_token and provider for RP-initiated logout session[:id_token_hint] = auth.credentials&.id_token if auth.credentials&.id_token session[:sso_login_provider] = auth.provider @@ -195,6 +277,15 @@ class SessionsController < ApplicationController return end + # Desktop SSO with no linked identity: send the app back to the login + # screen with an error. Linking/JIT creation still happens through the + # normal web flow; the desktop handoff only resumes already-linked users. + if session[:desktop_sso].present? + session.delete(:desktop_sso) + redirect_to "sure://sso/callback?error=account_not_linked", allow_other_host: true + return + end + # No existing OIDC identity - need to link to account # Store auth data in session and redirect to linking page session[:pending_oidc_auth] = { @@ -228,6 +319,14 @@ class SessionsController < ApplicationController return end + # Desktop SSO: send the error back to the app via the custom scheme so it + # stops waiting, instead of stranding the flow on the web login page. + if session[:desktop_sso].present? + session.delete(:desktop_sso) + redirect_to "sure://sso/callback?error=#{sanitized_reason}", allow_other_host: true + return + end + message = case sanitized_reason when "sso_provider_unavailable" t("sessions.failure.sso_provider_unavailable") @@ -273,6 +372,27 @@ class SessionsController < ApplicationController mobile_sso_redirect(error: "device_error", message: "Unable to register device") end + def handle_desktop_sso_callback(user) + context = (session.delete(:desktop_sso) || {}).with_indifferent_access + code_challenge = context[:code_challenge] + + if code_challenge.blank? + redirect_to "sure://sso/callback?error=missing_session", allow_other_host: true + return + end + + # One-time authorization code, bound to the PKCE challenge, exchanged by + # the desktop webview for a session. Short TTL + single-use + PKCE. + code = SecureRandom.urlsafe_base64(32) + Rails.cache.write( + "desktop_sso:#{code}", + { "user_id" => user.id, "code_challenge" => code_challenge }, + expires_in: 2.minutes + ) + + redirect_to "sure://sso/callback?code=#{code}", allow_other_host: true + end + def handle_mobile_sso_onboarding(auth) device_info = session.delete(:mobile_sso) email = auth.info&.email diff --git a/config/routes.rb b/config/routes.rb index 2507abcee..b0c4f0052 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -275,6 +275,11 @@ Rails.application.routes.draw do resource :registration, only: %i[new create] resources :sessions, only: %i[index new create destroy] + # Desktop app SSO: opens the flow in the system browser (so passkeys/WebAuthn + # work), then hands a single-use, PKCE-bound code back via the sure:// scheme + # which the desktop webview exchanges for a normal web session. + post "/sessions/desktop_exchange", to: "sessions#desktop_exchange", as: :desktop_sso_exchange + get "/auth/desktop/:provider", to: "sessions#desktop_sso_start" get "/auth/mobile/:provider", to: "sessions#mobile_sso_start" match "/auth/:provider/callback", to: "sessions#openid_connect", via: %i[get post] match "/auth/failure", to: "sessions#failure", via: %i[get post] diff --git a/desktop/.gitignore b/desktop/.gitignore new file mode 100644 index 000000000..82242858b --- /dev/null +++ b/desktop/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +dist/ +src-tauri/target/ +src-tauri/gen/ diff --git a/desktop/README.md b/desktop/README.md new file mode 100644 index 000000000..edbe1a974 --- /dev/null +++ b/desktop/README.md @@ -0,0 +1,85 @@ +# Sure Desktop (macOS) + +Native macOS shell (Tauri 2 + WKWebView) that renders the full Sure web app and +wraps it in real Mac chrome. It always talks to a Sure server you already run +(self-hosted or managed) — same trust model as a browser. + +## Requirements +- Rust (stable), Node 18+, Xcode command line tools, macOS 12+. + +## Run in development +```bash +cd desktop +npm install +npm run build # builds the injected bridge.js + onboarding assets +npm run tauri dev +``` +On first launch, enter your Sure server URL (e.g. `http://localhost:3000` when +running `bin/dev`). The app health-checks `{server}/up`, then loads the real +`/sessions/new` where you sign in with password or SSO (MFA supported). + +## Build a release .dmg (unsigned) +```bash +cd desktop +# Single-arch (host only): +npm run tauri build +# Universal (Apple Silicon + Intel) — what releases ship: +rustup target add aarch64-apple-darwin x86_64-apple-darwin +npm run tauri build -- --target universal-apple-darwin +# Output: src-tauri/target/universal-apple-darwin/release/bundle/dmg/Sure__universal.dmg +``` + +## Publishing a release +The desktop build runs automatically as part of the normal Sure `v*` release. +The version comes from `.sure-version` and must match the release tag; it is +stamped into `desktop/package.json` and `desktop/src-tauri/tauri.conf.json` +only while building. The universal `.dmg` is attached to that same GitHub +Release—there is no separate desktop action, tag, or version. + +## Installing an unsigned build (end users) +The published `.dmg` is **not code-signed**, so macOS Gatekeeper blocks the first +launch. To open it: +1. Drag Sure to Applications and try to open it; dismiss the warning. +2. **System Settings → Privacy & Security**, scroll down, click **Open Anyway**, + and confirm. (On macOS 15 Sequoia the old right-click→Open shortcut is gone; + this Settings path is the way.) + +If macOS instead says the app is "damaged", the download was quarantined — strip +it once in Terminal: +```bash +xattr -cr /Applications/Sure.app +``` +Signing + notarization (below) removes this friction entirely. + +## Rust tests +```bash +cd desktop/src-tauri +cargo test +``` + +## Deep links +Registered scheme: `sure://{host}[:port]/{path}` → opens the app to that +server/page. Example: `open "sure://localhost:3000/accounts"`. (Works from the +bundled `.app`, not `tauri dev`.) + +## Code signing & notarization (required for distribution — NOT wired up) +No Apple Developer credentials are needed to build/run locally. To ship a +distributable, signed, notarized `.dmg`, add: +1. An **Apple Developer ID Application** certificate in your login keychain. +2. Tauri signing config in `src-tauri/tauri.conf.json` under `bundle.macOS`: + `"signingIdentity": "Developer ID Application: ()"`, + `"hardenedRuntime": true`, and an `entitlements` plist if needed. +3. Notarization after build: + ```bash + VERSION="" + xcrun notarytool submit "src-tauri/target/universal-apple-darwin/release/bundle/dmg/Sure_${VERSION}_universal.dmg" \ + --apple-id "" --team-id "" --password "" --wait + xcrun stapler staple "src-tauri/target/universal-apple-darwin/release/bundle/dmg/Sure_${VERSION}_universal.dmg" + ``` +These steps require an Apple Developer account and are intentionally left as a +documented follow-up. + +## Not built yet (see spec §9) +- Balance-with-sparkline glance widget (Tauri floating panel and/or a WidgetKit + Notification Center widget with App Group data sharing), fed by an + auto-provisioned read-only API key polling `/api/v1`. Deferred by design. diff --git a/desktop/index.html b/desktop/index.html new file mode 100644 index 000000000..d89641f2e --- /dev/null +++ b/desktop/index.html @@ -0,0 +1,38 @@ + + + + + + Sure + + + +
+
+
+ +

+
+
+ + +
+ +
+

+ +
+
+ + + diff --git a/desktop/package-lock.json b/desktop/package-lock.json new file mode 100644 index 000000000..944b1ae43 --- /dev/null +++ b/desktop/package-lock.json @@ -0,0 +1,1263 @@ +{ + "name": "sure-desktop", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "sure-desktop", + "version": "0.1.0", + "dependencies": { + "@tauri-apps/api": "^2.1.0", + "@tauri-apps/plugin-autostart": "^2.0.0", + "@tauri-apps/plugin-deep-link": "^2.0.0", + "@tauri-apps/plugin-notification": "^2.0.0" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.1.0", + "typescript": "^5.6.0", + "vite": "^5.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tauri-apps/api": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.11.1.tgz", + "integrity": "sha512-M2FPuYND2m+wh5hfW9ZpSdxMPdEJovPBWwoHJmwUpysTYNHaOkVFN419m/K0LIgjb/7KU2vBgsUepJWugQCvAA==", + "license": "Apache-2.0 OR MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.11.4.tgz", + "integrity": "sha512-R8xGtMpwyetawSqm9kYOuMmEqkhUbvcUy8n0aNXIxollKBLESUu5f4Fx+64hgASYm1H+jSWq6jCW6zqTnH6hqQ==", + "dev": true, + "license": "Apache-2.0 OR MIT", + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.11.4", + "@tauri-apps/cli-darwin-x64": "2.11.4", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.11.4", + "@tauri-apps/cli-linux-arm64-gnu": "2.11.4", + "@tauri-apps/cli-linux-arm64-musl": "2.11.4", + "@tauri-apps/cli-linux-riscv64-gnu": "2.11.4", + "@tauri-apps/cli-linux-x64-gnu": "2.11.4", + "@tauri-apps/cli-linux-x64-musl": "2.11.4", + "@tauri-apps/cli-win32-arm64-msvc": "2.11.4", + "@tauri-apps/cli-win32-ia32-msvc": "2.11.4", + "@tauri-apps/cli-win32-x64-msvc": "2.11.4" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.11.4.tgz", + "integrity": "sha512-1ryOF3ZhpZ/nemHV5zVwBQBz9jDGKmKPvWPADOhc83ig0P4bMc2iER4NbC6r9sjeIZ6RVQ4g3RZIYvezhcl4TQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.11.4.tgz", + "integrity": "sha512-uFsGQAAfuyz1k/yGLmkWfkBlgKAqZfxqlHmLWx81QU27RJWfmbNHCIq8T8w1e+VClleIuZUjpHWfoE4E3DLo3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.11.4.tgz", + "integrity": "sha512-IaHZn5CdBL21oUmjiVOS1ctw6Ip1O0pjp70FwOWmYz1myWe0SY96ZIj2FYf7pT0m8bI2h/hrs5ZbEXXh44/MkQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.11.4.tgz", + "integrity": "sha512-N41/ukTRVe6XSuUTESuFdGeOW2i7k62tK+6gHK5Kd5/q5RPvvi19GaWAVPPb9u95HSGmTChSolBfzynUsssFaA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.11.4.tgz", + "integrity": "sha512-v277UnT/fB64xAfSroL5N3Km3tLmvATWqJJw/wRI+g6o+HkeD0slyE7gOhNs1MbjE41R7bQOTxMVoL3aomUJmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.11.4.tgz", + "integrity": "sha512-qqgNkQ2u1yZHxjhxsZaxUtRDW8dIqIYm33rx/mzwQv0SfY9x1B+iraj8vWeFiXjjSVVhEMepXSOts1TqPzvXNQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.11.4.tgz", + "integrity": "sha512-2VRNWl84FOH0m2giiDkO2h0QXlcMJeX+zJDpI5kDIQAx6s+geF3v48F4DXfJez4GS/FdoDGnPnw1C2iYGbQ7bQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.11.4.tgz", + "integrity": "sha512-o9GyhYor/nc7xarmwDE3ka2szuW3uuZzXjHWh64Q8YX5AtSgxdQkFWzrY4O8KiGtVNvFBI14H3Q49Qj5TOIP/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.11.4.tgz", + "integrity": "sha512-ld5Ehb598m0VkYyylRPNeCFsBe/km0jxis6KgMpl3IGY6I/i1RwQXO05I1AsXUXO2WC6AvB/Lw4qTf/asiuEiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.11.4.tgz", + "integrity": "sha512-12Hxi0XX/H5VFxO/bGgHkFWhml9VMgEOu9CidjeCeTNQ1l6fpUlbiGgSP7CLI3PFtW9/FfbeHieZ+kyWK5H7CA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.11.4.tgz", + "integrity": "sha512-+vDiqBIU5dMISg/wNvX3sF+ZHfgJGJ5T0AcO+EHNXV9GGAG+P5fzodlDXD3QdKCRgZxMoCm5PPvj3BqLNjBthw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/plugin-autostart": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-autostart/-/plugin-autostart-2.5.1.tgz", + "integrity": "sha512-zS/xx7yzveCcotkA+8TqkI2lysmG2wvQXv2HGAVExITmnFfHAdj1arGsbbfs3o6EktRHf6l34pJxc3YGG2mg7w==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-deep-link": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-deep-link/-/plugin-deep-link-2.4.9.tgz", + "integrity": "sha512-u0SKOUHnJ1wqeqXsDFq2+kASCBj9xxbG0g9XZWPy9SOmU4wXtp6b/wiYpm6oH6/5fBTQsLqnLhIvqLBRpgHJlA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.11.0" + } + }, + "node_modules/@tauri-apps/plugin-notification": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-notification/-/plugin-notification-2.3.3.tgz", + "integrity": "sha512-Zw+ZH18RJb41G4NrfHgIuofJiymusqN+q8fGUIIV7vyCH+5sSn5coqRv/MWB9qETsUs97vmU045q7OyseCV3Qg==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.21.tgz", + "integrity": "sha512-v4sDNP3fdNiWMfabO7OwOQdOX8TiQSztKyT1Wj0w+j7LDallJThJRBBBmzVGyYj0crMh7jlV4zepPkiNu9UwDQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + } + } +} diff --git a/desktop/package.json b/desktop/package.json new file mode 100644 index 000000000..71abef5fc --- /dev/null +++ b/desktop/package.json @@ -0,0 +1,22 @@ +{ + "name": "sure-desktop", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc --noEmit && vite build", + "tauri": "tauri" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.1.0", + "typescript": "^5.6.0", + "vite": "^5.4.0" + }, + "dependencies": { + "@tauri-apps/api": "^2.1.0", + "@tauri-apps/plugin-notification": "^2.0.0", + "@tauri-apps/plugin-autostart": "^2.0.0", + "@tauri-apps/plugin-deep-link": "^2.0.0" + } +} diff --git a/desktop/prefs.html b/desktop/prefs.html new file mode 100644 index 000000000..0cf09f9bd --- /dev/null +++ b/desktop/prefs.html @@ -0,0 +1,30 @@ + + + + + + Preferences + + +
+
+

+
+

+
    +
    +
    + +
    + +
    +

    +
    +
    + + +
    +
    + + + diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock new file mode 100644 index 000000000..235f21660 --- /dev/null +++ b/desktop/src-tauri/Cargo.lock @@ -0,0 +1,5646 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "ahash" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289" + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "async-signal" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-launch" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f012b8cc0c850f34117ec8252a44418f2e34a2cf501de89e29b241ae5f79471" +dependencies = [ + "dirs 4.0.0", + "thiserror 1.0.69", + "winreg 0.10.1", +] + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "brotli" +version = "8.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.13.1", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2d30e4173c4026932d51d31d6b0613b1fd3014bf3f9f8943d4ba139c437ba0" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.19", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "cc" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "libc", + "objc", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.13.1", + "core-foundation 0.10.1", + "core-graphics-types 0.2.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.13.1", + "core-foundation 0.10.1", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ctor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.119", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dbus" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "serde_core", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +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 = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users 0.4.6", + "winapi", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.13.1", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dlv-list" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68df3f2b690c1b86e65ef7830956aededf3cb0a16f898f79b9a6f421a7b6211b" +dependencies = [ + "rand 0.8.7", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser", + "foldhash", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "embed-resource" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbfdaacccebec3b28e4866b8973543c7647797db5ada1bdab552e48fe665fbbd" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.3+spec-1.1.0", + "vswhom", + "winreg 0.55.0", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + +[[package]] +name = "enigo" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "802e4b2ae123615659085369b453cba87c5562e46ed8050a909fee18a9bc3157" +dependencies = [ + "core-graphics 0.23.2", + "libc", + "objc", + "pkg-config", + "windows 0.51.1", +] + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "file-locker" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75ae8b5984a4863d8a32109a848d038bd6d914f20f010cc141375f7a183c41cf" +dependencies = [ + "nix", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "freedesktop_entry_parser" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db9c27b72f19a99a895f8ca89e2d26e4ef31013376e56fdafef697627306c3e4" +dependencies = [ + "nom", + "thiserror 1.0.69", +] + +[[package]] +name = "futures-channel" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" + +[[package]] +name = "futures-executor" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "futures-sink" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" + +[[package]] +name = "futures-task" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" + +[[package]] +name = "futures-util" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.13.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever", +] + +[[package]] +name = "http" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png 0.17.16", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "js-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.13.1", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "keyring" +version = "3.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c" +dependencies = [ + "log", + "zeroize", +] + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" +dependencies = [ + "libc", +] + +[[package]] +name = "linicon" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee8c5653188a809616c97296180a0547a61dba205bcdcbdd261dbd022a25fd9" +dependencies = [ + "file-locker", + "freedesktop_entry_parser", + "linicon-theme", + "memmap2", + "thiserror 1.0.69", +] + +[[package]] +name = "linicon-theme" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4f8240c33bb08c5d8b8cdea87b683b05e61037aa76ff26bef40672cc6ecbb80" +dependencies = [ + "freedesktop_entry_parser", + "rust-ini 0.17.0", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "mac-notification-sys" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd604973958ddcc11b561193c0fb96ba146506ef2f231ef2e7c35fd2cbc9beca" +dependencies = [ + "cc", + "log", + "objc2", + "objc2-foundation", + "time", + "uuid", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "muda" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd04e60bc0b07438a6771710ee1698f98f6ebbc7f89b61264af1563b8aeb878" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.19", + "windows-sys 0.61.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.13.1", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.13.1", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "notify-rust" +version = "4.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5b4c1b4f2aa9f25f63a7a49d3dd0ed567b3670da15330a66b29434be899b891" +dependencies = [ + "futures-lite", + "log", + "mac-notification-sys", + "serde", + "tauri-winrt-notification", + "zbus", +] + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.13.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "open" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0b3d059e795d52b8a72fef45658620edd4d9c359b338564aa14391ffa511ed5" +dependencies = [ + "is-wsl", + "libc", +] + +[[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.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485" +dependencies = [ + "dlv-list 0.2.3", + "hashbrown 0.9.1", +] + +[[package]] +name = "ordered-multimap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" +dependencies = [ + "dlv-list 0.5.2", + "hashbrown 0.14.5", +] + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plist" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1d65da6dd5d1e44199ac0f58712d241c0f439f80adea8924d832384087f85" +dependencies = [ + "base64 0.22.1", + "indexmap 2.14.0", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.13.1", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.13+spec-1.1.0", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.1", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.19", +] + +[[package]] +name = "ref-cast" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "reqwest" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rust-ini" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22" +dependencies = [ + "cfg-if", + "ordered-multimap 0.3.1", +] + +[[package]] +name = "rust-ini" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7" +dependencies = [ + "cfg-if", + "ordered-multimap 0.7.3", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.13.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.119", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.13.1", + "cssparser", + "derive_more", + "log", + "new_debug_unreachable", + "phf", + "phf_codegen", + "precomputed-hash", + "rustc-hash", + "servo_arc", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" +dependencies = [ + "base64 0.22.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "sure-desktop" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "getrandom 0.2.17", + "keyring", + "open", + "serde", + "serde_json", + "sha2", + "tauri", + "tauri-build", + "tauri-plugin-autostart", + "tauri-plugin-decorum", + "tauri-plugin-deep-link", + "tauri-plugin-notification", + "ureq", + "url", +] + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.35.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" +dependencies = [ + "bitflags 2.13.1", + "block2", + "core-foundation 0.10.1", + "core-graphics 0.25.0", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "once_cell", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows 0.61.3", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "667b20e2726d572dea2de7370da16e188eb06008faf9a92fab7cdc46791190b5" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs 6.0.0", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.19", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows 0.61.3", +] + +[[package]] +name = "tauri-build" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9ce40b16101cb6ea63d3e221567affd1c3a9205f95d7bc574941a10636b632" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs 6.0.0", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08279169ff42f8fc45a1dbc9dcae888893ba95288142e5880c59b93a26d2cfc5" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.17.16", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.119", + "tauri-utils", + "thiserror 2.0.19", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8b394794f399a421811d06966343e7933fcae92d59f5180b9388d1174497a45" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74be5dd4bed9afbd145e5716b5fa2ec28cbc29c34ffa61c258c9273d896c8020" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "walkdir", +] + +[[package]] +name = "tauri-plugin-autostart" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "459383cebc193cdd03d1ba4acc40f2c408a7abce419d64bdcd2d745bc2886f70" +dependencies = [ + "auto-launch", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.19", +] + +[[package]] +name = "tauri-plugin-decorum" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db925c61a04a937028bc91ad8ae64a93b84a1715b964530925a54e793d494999" +dependencies = [ + "anyhow", + "cocoa", + "enigo", + "linicon", + "objc", + "rand 0.8.7", + "serde", + "tauri", + "tauri-plugin", +] + +[[package]] +name = "tauri-plugin-deep-link" +version = "2.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ee75bc5627f77bfdf40c913255ebc258117b10ebe2b2239a1a1cf40b0b58aa" +dependencies = [ + "dunce", + "plist", + "rust-ini 0.21.3", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-utils", + "thiserror 2.0.19", + "tracing", + "url", + "windows-registry", + "windows-result 0.3.4", +] + +[[package]] +name = "tauri-plugin-notification" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01fc2c5ff41105bd1f7242d8201fdf3efd70749b82fa013a17f2126357d194cc" +dependencies = [ + "log", + "notify-rust", + "rand 0.9.5", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "thiserror 2.0.19", + "time", + "url", +] + +[[package]] +name = "tauri-runtime" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0b4bc95aed361b0019067d189a1174a603d460d0f6c72606512d59fc9c12ec8" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.19", + "url", + "webkit2gtk", + "webview2-com", + "windows 0.61.3", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e6fac707727b7a2f48e4ded90976324267371073edbb415ffb73bb0458d203f" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows 0.61.3", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e176a18e67764923c4f1ce66f25ae4abe5f688384d5eb1a0fa6c77f3d90f887" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "http", + "infer", + "json-patch", + "log", + "memchr", + "phf", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.19", + "toml 1.1.3+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +dependencies = [ + "dunce", + "embed-resource", + "toml 1.1.3+spec-1.1.0", +] + +[[package]] +name = "tauri-winrt-notification" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed071c670382e85fc2f48ae706492d8c338f4f89bf72520d32f8abfe880aade" +dependencies = [ + "thiserror 2.0.19", + "windows 0.61.3", + "windows-version", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendril" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" +dependencies = [ + "new_debug_unreachable", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +dependencies = [ + "thiserror-impl 2.0.19", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "time" +version = "0.3.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-util" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.4", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.14.0", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.13+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.4", +] + +[[package]] +name = "toml_parser" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +dependencies = [ + "winnow 1.0.4", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.13.1", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tray-icon" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65ba1e5f6b9ef9fd87e21b9c6f351554dbd717960089168fcfdef854686961dc" +dependencies = [ + "crossbeam-channel", + "dirs 6.0.0", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.19", + "windows-sys 0.61.2", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "uds_windows" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" +dependencies = [ + "memoffset", + "tempfile", + "windows-sys 0.61.2", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" +dependencies = [ + "base64 0.22.1", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.119", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "075474b12bcb3d2e3d4546580e9de478eeeead668a1761e2a8860c836b7ef297" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.9", +] + +[[package]] +name = "webpki-roots" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.61.3", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.19", + "windows 0.61.3", + "windows-core 0.61.2", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core 0.51.1", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "wry" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs 6.0.0", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.19", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.61.3", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zbus" +version = "5.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow 1.0.4", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" +dependencies = [ + "serde", + "winnow 1.0.4", + "zvariant", +] + +[[package]] +name = "zerocopy" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" + +[[package]] +name = "zvariant" +version = "5.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow 1.0.4", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 2.0.119", + "winnow 1.0.4", +] diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml new file mode 100644 index 000000000..2310bb5d0 --- /dev/null +++ b/desktop/src-tauri/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "sure-desktop" +version = "0.1.0" +edition = "2021" + +[lib] +name = "sure_desktop_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +tauri = { version = "2", features = ["macos-private-api"] } +tauri-plugin-notification = "2" +tauri-plugin-autostart = "2" +tauri-plugin-deep-link = "2" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +keyring = "3" +tauri-plugin-decorum = "1" +url = "2" +ureq = { version = "2", features = ["json"] } +open = "5" +sha2 = "0.10" +base64 = "0.22" +getrandom = "0.2" + +[dev-dependencies] diff --git a/desktop/src-tauri/build.rs b/desktop/src-tauri/build.rs new file mode 100644 index 000000000..581cd65da --- /dev/null +++ b/desktop/src-tauri/build.rs @@ -0,0 +1,10 @@ +fn main() { + let bridge = std::path::Path::new("../dist/bridge.js"); + if !bridge.exists() { + if let Some(parent) = bridge.parent() { + let _ = std::fs::create_dir_all(parent); + } + let _ = std::fs::write(bridge, "/* bridge placeholder */"); + } + tauri_build::build(); +} diff --git a/desktop/src-tauri/capabilities/default.json b/desktop/src-tauri/capabilities/default.json new file mode 100644 index 000000000..e3404bffb --- /dev/null +++ b/desktop/src-tauri/capabilities/default.json @@ -0,0 +1,19 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Default capabilities for the main window", + "windows": ["main", "prefs"], + "permissions": [ + "core:default", + "core:window:allow-start-dragging", + "core:window:allow-show", + "core:window:allow-set-focus", + "core:event:allow-emit", + "core:event:allow-listen", + "notification:default", + "autostart:allow-enable", + "autostart:allow-disable", + "autostart:allow-is-enabled", + "deep-link:default" + ] +} diff --git a/desktop/src-tauri/icons/128x128.png b/desktop/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..b68b5b261b46d382eeb50d407c1d524184277c8d GIT binary patch literal 8944 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 z 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 UeUZrAxc~qF07*qoM6N<$g4~L2S^xk5 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/32x32.png b/desktop/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..2d49438b2a752f9b6cc6d95f9573033647d62a34 GIT binary patch literal 2181 zcmV;02zvL4P)?%psxJ?(@ieJlt9R;g5uqB)LIMx8}b z6k@$hTtXY4f-dcm^1;EuUM%_%1m6#8RZ1y~;^Z9zLu#+?C>#WC(>vsvbC+O%n*@B4o!6bkc67@$$fPRQp5%4~uxDW*Qz z*4Fl6SbqcRszvyW0c30($Nc{ZWDm-phb8j?BSDl&1(B{yCLkpIcmcbpsH18?e*E*i{zrGPGIZ?;Kq7gH!>% z;a4gbQ2)u$(9nBG$NU_!qXaoUrvVUF#-!Eda=8y}%IO=>E|BF=MySk3J%yX{zq_-u za|p`MQ7Sd#@^aTv++giZsK14^g{z^IrpS6s*hdkK@;u5{(S88$&*S|J3MrLI3JIi- zqP&LU2NFZyCzFuE*iIOEgkpzK<+E6t#=sO(uoHraUtOM~?%?x0FKFR|RDfvl?QAhX zIj+Dbd9WYBe*&4d6h_(EY;fF9O2Gkj1foj(A5cM%*%k#VV6F=A)Lqx z^Rx=%@a;;q^7Z28;+@G!Hx9c#1LRJVV9b}WMH19;tX{_WSxh@yu9W|+w0bvI@oDHe z1;kH7*WV!ba=LtOaC>iEUb@+GeZ4Wd-3aR&5jVKx6J52N{_^D3MP!i@Rl+Kucuy#!sc$9 z$Ffr{uy5%Ij1d8(V{tn_-h!n#DFrhg*}eg53(`)FcoMc7T5N zW?g0P&2^OI6KO;S#HQM&i^X|3dq+{H5$@!*fl*BT^CoQkE_s}3<|!K0bub3 z7oG@cQ`qM{-fRYt99T&c7NU7;koTAgWZ+m*P%81i!pVIO8SA{dgBwW(3q2`}@_ z_IWmkF>rzX2axK)oC|2TLrxBX>eE(cHGsl}BAHve6wTM_Q_)eVsX^Jz7`?|Db(~9S z-nYzq?}#w_TI^Q?%Y_U$TLx1nFgPNVdff{zo!s%YKgW-4zs>iq^0lDhBQLB* zrIEFzCt8QrjNa9;`{Cc0*T1;x6oQlj%<$$(*@TV~S=%48Y~zs6#1#5I3Ots1zM!Cf zE~>GbDRlqwE2Ara9SK{S-368&n@|2#*uq*`GK;VBg_aQ`Wuv46mKqt zDV1=Fz=&=y>wU?^5|G3^8;8o}n~)-pI9XBX&aNm=)OMzMPyVLA=8v;xYTD)nm6R8k zk0~nPMcy~u=Z&mAeB3HMn46a&s-aJ$*wP7?7y+LvaD$5LO1row7QjCUDyB?=^0&Qt z!4n>Ce*#g7ywo0VUgIbOeBrrh7qcATc8rZFTodqVR@w?EaisC5GX>wLY|*i!6XTeL zH<^VD!>)x75~2ieRHBk;%lE(VxmRnR)w~{7B1*9-P^C-&QH^rcgO#vr{Jy?iF` z$KGXEo2m{)JzK5)@}WP~=eksqJI0D*?qh~dzcb_hEzB1mvWj&ZZao+>4TAnx%+#sT zb+2D&ep@z?Ef$%%<`0XRuj)IF2p1!BJhbC;e?P}lgX#GX7sSA0Gfi~`00000NkvXX Hu0mjf%bPiZ literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/64x64.png b/desktop/src-tauri/icons/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..33858a9be5327730cfecf2ade56367dc19e74f74 GIT binary patch literal 4496 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

    S) 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 bbwT?-!eo0G3Ng_B00000NkvXXu0mjftTAM) literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/Square150x150Logo.png b/desktop/src-tauri/icons/Square150x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba6b1447d5c2e593792d6ea025b4de3bf59d492 GIT binary patch literal 10624 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 W>QECeE86ZG#cXtTx4uiXEa0?P3xJ&+gyJsKv zVb9)k?tN&fs_w4SCBM31Y9AHQQAkh#006p@qO1l00ObGgMM8LMIqv8x0|0dXD9K7` zd9IxLB0>#6wfFe~JD`CR3AA%1 z&SBIkCEXS-RfNi9J{aQ0ge>O`m6U!=)O7dSY`$IL5nO$3eq%Y6{bDv&SG=1yL1*m%AB&P{+{Xpn z+9!QRku}4`W>SV|0{G$8o@D>MzJ&7e@}ku{w9l)l&?P7(eJlxDDA&<94G;f;7h~?) znt3V8aq#3w`u|$b`~3X>YstYJ z1k_&cWtbr9G{0|kdvf4qS(Ji32FOMdn%tG=Feg$?7~Va#JoOPIGe*PYM;9%;mnFvK zgi+hgqP_rX3-Vic>(@cVmfinzYKPCO$rX4EMq4_rnkGW6g?3$Hu&_J_u5TM@9Sq zWc*+j&C!@!aW~Z2K2LQWcrM2oZOpgahnvSOs;EVIqjW{R6jn%A+-Or@kH_~3*tE0V zgVP=M;|D#34N6URrjhf~REw45L* z7Ab8K-}GsM7QD^Ou#MT(4pOFYdI;J7Zt(FG0jHzsh#xw+JHUj$4NNcq-=Pp?WVB(o-vj zX0<^XxeDj>4eQI@P*07v5Csd5A9Wz6R8+GVh*o@R$N^-Dp&;zeyXC9zykQy5*3v!W zoOyGj!8 z8DMOPYO5g!0>=I?HJ00gRia0(3X|1Rb&g* zpln@G^jP={tj7f%<4#KG79(Im9S~}EF^w%KuK^b%KM&R$XBiaO6L zCAZipYHV#!BXR)_%9LP4 zYgr>S`*g_xK=J|!aC0`~NP+;P*Zfm*Pw~nQt!=lND{dr; zc;iXzGp;%PYSeL5oUt)-5HJNNJaZ@uUiQWwUlUA~q7flNedhVxZw0~jCpmyqk#9CS zR0akA8Z;la-d^E4chTd)fBG1%Q@#R$ZH8JgphL6MCq{i| zexT|H(r5FzekW|70^_T460dKPRuJJx= z=5+~IYf(1**a@ZUpGb5l;lvrbGvEiQ0I`UJ^S_Trf$l@+usOn>@4sEEP3`}MA5hXP zoA_)-!;v=%rQanmsNT|DGE>7AZ&uRmC`3RJ7n@G5CpOD z1G2vJIsG#BVQC|Y!$N?UAGo27#_1o(9!wm0CUHKC52#hBwGj<=RxRIu{D_`?ZW2z< zKn*K)F9;?|&{j#D>VCc)Lj=Gk2ctH$y{v6mR|~^obyI4R``|&-lw<&grT~` z(7$tlHr3tQ@{8qFPD35Yu4j#Lw;x{%h5l}OCYMeTL|+!_paU)L{r)LNsr<8OCJ+X3q1V$Tgd^t@j;wY}6tQ)sF=;YFnmCoVc0I0c|J!Ea`Ah-WdT;IW z)vE^)S@Z`|O(TM}Wu6a8$-jQnC+-(ZFb^v$$D)@!tl|ke8TK4A9X`^LmoXt7v5MN0 zS_Wt>YoVarA`ycQ`NMNQY3|YImNB=wP}5=BJ5#2k@Eod!$UD*T2G(no;mvV2xXYhP zjgK3}6+=+ruqm?A-VH~=Zd$?nf9P65ICfT8drpmev<%CY%hJIlvhQ)0t-FXMuc}-3 z)6Hr>R}GlnHqTV+w-p`I>W#`zX)yZ>bBE;Bm`oL^B`guI zX6D4)4^Ijm)r6xWCBw;J_{6`MG8H}n%e9_Ul6@52oOvWyDrj=O&SFg5^Zx1}%Y%YX z44L%@-gn(u8@7r2nU>Cfh_0nuGVQTa!2Qet!bnA_2~;B<%#Igur#CT9T>SKMBuA7u zFQMf@9H+>EmbSJZ`(<8Oi1xkdtlXh-y#=pqIK?s%Q^aS6Sav63_v;+$Hp_uP5XgF9 z!C47Gs<0*CbSHx2BWT`bdYKsrK?PVRlof3|(J@j{Q)@WE8Nmddd68{@hGIj-@}@yv=`cMymI-P z+RwW5>kE5JZgC$Ml)+l@j&IyhaF>bT>B6XZn_RbbL7nk!l;-^>W0|>k$k8EjI(%;yt%gU7>>PNKIMZEFFD`c`Iaq~R+1br&0XUooe z7e9mjW{8xd(7PH-5B5A`eIuRD|CesXn6ySiVzSyRvN21JiAt&pNvkb6>GiO{u|12eFE@jY1XRYhW`X1OY z9+EeHFMmMgt@_;5O6gxsC&@@X>!ry{Co{tw`><~h=LxA@C3uM&bkhkDl%xdL9P(50 z_YmQC5}wg`>dt)giiUCs=ig;aU0wEQN~+2hz7&@-$kYa5#rnkCQ|q0iW@EOcFz?Z< z`BCOxVHjP}M`JoyASyb5i5!Mbg~`}i1SJ`_>SKdoAxrf>Y{5(D!{*#U&J^E=5O;~f zyLreCumx`irJ7+I_Zctu&B%V(hg{?gpbpETDV!QyY#TYVu~9YNwC@x^_|Wy`;9U~lffLgqX^15Cl+->aXL{1 zG;}qAg{;4JaaB7orQtHsL7t}Xzr1&GEg@D=K`%bY5?FHzLTHTO=n@q2xp%^Z>aLX67?^0P*IRCm8V3e;xAfM7`^HC(leW`)?O&l+q0B#2@tB5)2e zny!z2BN9>n%l7iEK|NnZKAfKG-M2Dy8KIk(*13Rfwvy?sb_1q409F3Lo>1_(PWo?< z6Lm1A{osiUS6+@ZUMy@sCHG7&BcF4I9TBG5|5-GA;FWn&SO6WG6O|v?&T{R5&AWBx zQXndjId|V4bx*2mt*Vt#H(1g<27rTBGckWKCjHi%o;&za60ve(%s&TN_B@6)*!be` z@$u1r=&1y_#cT>-*rL}sM{A3La8EHV0HndGz~VYq zdU+X5b8iJ1H%P&+@GE-JX5hh%=ag{Afp5n@L+Dnhpd&3K@V?_&k!4Oz@rJ_26I*dm ziv3nRy<&d+`M9e6uUsZa&r8Nu%#-R`7v6ocEGONN8@4Vzb#Q4d*X2-!cRHhfUSsW< zR9QYLO=#DQ9u3bz^pd}O@X=V`{d}rfaxd5PblsVoEMN>S_rv)U(b5S`<|aR45ZDeP z|1V(y(|LmX{U@$6YClx^a#DYCLmWYW(mQ_ywRUX(Gf}d(9qHt7MJXWZ1mP`yaO)-Z zcugpT*%!U|M@q>=5{W_7xM>tyTn->xRxd7SCsgK1L=qtba7WqU1n-{ zt8n>OGS);9&bV&+2bFbtZPYS)5wRtbRGbSZUv~&$-Z69u721qAKCkH{4o~Gy%wOUS zSl9G?jq!Yyg8m}0b)BC)(s59Vumf%-Z@SH?C`giuj*a7%F%d8^Ld=ZSiv{ORx#nSK zJkfd?djdB~khK6DCd(=WztUIu!TD3f({E&xyAbV-@Z(1T(N3bJ+wAh{uJl(CIhFN9 z7q3cyL2rk9)sX~Cp)YkXz9=L-K$md|689|E&=mNAyGc1+KEWMPg$2|Gmi&tcm}6S5 z@k5F&@OqGNlIXyrqixRbX&wAdSNgy`N)3-_zt$L4eOjG*=*q&v!U54jQ>C*=MbU1L zfU-*hU;@AOg7O-D$(L@ATP8hrYxMyJ|9*TjIKg7%)JwOvrT&SP(Q2J0>gCeF@(+>z zb=66d0sSsT(HUwGNY7GLiNI0lmWjCKjRAE>^s(tfvK@AHEiD>}4Z}mPk;B&5S26)A zzk|o1aMfcRBw(^n_+5#C9o#C=@b6*+2r1`hYLZdE@&}r52GmIs*sV9j@;J z?6PE>0xCMLJITKek$ddPy5cgCKr~GX=NVdndtU-tU9dCKsgM)9QZmu9n6)VlaP+(} zoD0O9?;OF+ia{we*#C)QGSlD)Lhpr~WNlznXnCO%ID;WTT3nkE2GF(fo)^SYBD-#bUt#f-8 zsJZB#;R&avk=KjHb#FhzaRcyLFrJ`UVy$IfiR`ORPA$dbO1bLc{}wvrPswP zV9Rn`OQqET1K0}6VK65ew0N#2b?k8VZ0H%OX+Zum%G*kCgbEuB>1<(i<#ev5g~nmU z#myu)2m~5|ot7v319m^NLg#V^*g^=J)7VazhY7_=SZ4Q}kf!msM0*;Gm4pF*LrFg^ zhe|cX@;kAa`z@hYCbd{Uemu`LfkA-+a1CF=4h!|)&zm2qkZqxDi6Ky~@ve!Y`L$f- zjl5tGKG4{@@ak+wx|dE2KqvWHoxAY#?`)K|^e#nFm%J0fIPN3;%9W?G35O?RpKpw& z;P6X2Ok^+tGx*cJ(S7Sz&d%b+`-A*057+!5KxsnlE54JO?_pDaFS~aFB80JWJh%a; zT0V;hPCW`z5v1lmE-Ld&g}7#_fLqWHU&1jIV*JWvMPfPchS=;RWN?e)&aD8=iZgLK zfk=*X1v8hn@xaUKxZc?4^fh&jZeER|a0KhMl3+K;sSOW$tG|HYpTd2ua4|@IlKcIN zU-YI_2rrfPHe^JYq#730eFssecEUPot@VjP_ub*cIA(e*FU8; zwK%PsqLsh4PO@&8;u2Gw>f8xusp|Q<&I(R+h{2!y%wC^jTCrh?US$)o{Ke!iRUqca z@t@eg3?UH`F%i2U`_wTvfrjQQ=REcyId2CY0O8V(;KNz#0mb_2tkd6mV&s^i{H0Cz zRfiWq?zf%Br(GW;3SqFnokXSrKr3XoqXaoeXQw?Da&hNs;O@4*J@&%Q24Xp|l|p!Pg4+$#R-f^nIX;BO|6yD2fjO%QefJGdwV5vBsz5 zNRjoRKkm@p2_YDMHlq^+r4$YCwe9twZ4O=EUtg`FbPw)hhR zZbEE7ZaJ)+3q|kA@cJFY7|}AH7`9z4d3wXm(6c3s_sC65 z4N;3u@n!PEBy$FUD)e&1jBPGJD`6hqGiLGl+4(){XGHXeW9X4~jXXvuHCJ34s67sy zm|NCittHN{4ex1=gx`E-r46v0Zlthx+#6CXUzYQ@(GCVC5K&c!hIq4e^|30~`M$?mV}-LvGzC(O zet;d%4mRTUv;m1~g*4z31JAZ^?*Im8Qe2RXKFnX)y`PD`?fPI%B2qQVBhHszIBa%_ z1*qJJk9Sv(s<~s<$Wh^{D_@z?<=W;1JsrSAeFzht#SOko%r7jwkSBC9@$ON--9DoPojOj8QyP zUhVtfIX6!n8&oiKxwj&lCXFz<^VIw{E5y80-LPA>sfExUEbdf}fkcd7Q z3>8qv_R!ujk`OUI0i~w`a2^)91r{GBUJ(B|#Ou0iy+@a@JcmjleOd|L2$f%YpB(=O z!;(CLgk8eK92G+0Bd5&-Tf$A6BI`B-6F5;1X<9s#3_<< z=pwF+_!IEFi*S~)<~pKL+{W7PD_Ra58c*cL_Ladd=FTRKA|0{&rdf>G=%>`{v5q{H zkg{dlX~BW7=Ha17oi@b&>ClyESaK}a5d}};6}GD*&tktBH#I!SzA`mJWzo=WAD-W` zqKjNewII+l(*Z;PEA7>yEIqU?>t~+b+dcSPmPiS-8&6zRub6ETUae?WiBD#})X7hm zMJTcBXF$bRqu?{Iu%zZ~FlEZ+kc8Obp6it(^BquWlWl73FklND+3t@f&*rJ-&~1vI+^bECdPj&4JCG}s6VAgT z<#7{v?h^J#e>Fs&Or)v_yT-ZU!_ZDHwBT)-6Ljt;263 z)kc|FUf~cX34iyEY$AFCi$@EpQW#1|byW6FweE>%4*Sxks76qCF*zEi)M9ugt6Tox z-b)=n{IaZ8^+N!~C?;8~aJUtKa+U2%)SoYMD+5?roZl-k!-$z-^s}gbROSN$4GjRA ziPNXef3KFA{3I)OQcbrDA@X|XENc?|X!vhCBxI7Koc;mRY`b%)DdGWj`g~b^gO4Nw zpf56^hPD7_iAGM01LTjR$mB5B3m~{fUGSD6U)`&##Ez<5k4JKKSqL%>dEXYQI3+Jr zRvGv6acX*&!i+fSNTW*cVnEE1F^^WT?by0B>N?GetBQlsgq9#mMfQeKsI->ZaZBO^ zvauq~=XO2?BP1jWRGnFI$F>-hzku}rWtE|RTLjNeJT>|Cad!}ZZ6FiHA>gcW_M3Fj zGS?8948y&IitQU-bS%x5N;(8*8uH)S<;nvS65^(X*It`ezUnYHDJx^$=WbV;&z7++ z@=vJo4|*Y!_Rc-1^!$f@wF%(^scux{rIGd8FM+ju`N&jjLtWV1Q!D&31(}j&Zxr9o zyYw$Q(cbh(#L7w*pgx#aYNWfV{7y=L4t6)AKq-b$a)11}qsiKVZE3CUf`8A?MwIPM zZkgN=dA5yvc+R}XgYP*G+7!qmJsY;PUS_PmS^yX+ff zvxNU!qU6i({2>1AuhynOaFoOsvA?g8_^2lr%zdk(vLTO0;#@Ls8q@acxv&^PO+TW& z1du4sxz(T##j|mU)z59Ll=-Emp*&lh3k*1AYgqhdFs}A?;D60hAi2=oTbwUBkkT>_ z()r7VCShy4l!$5v2A=DDKBsD%w0p?fk=qY|z#S&B%{?i!P z$SYh0w8dyB*#yqZn*@jv;TwAp)_>hgp|8;p)qklQXimTBb2UL~`r7cNbMTpz*LB-515T}z zU~>RNN#?!TmkWe%hg%*NFAN$L_5z`QNff_mF)KutZ-**vEf+Iy$a0GHH#EQD0 z$BWw@z9_GCEz=X-xf!^W*dU{@Me;9OskxX`Bj$I?Opf{Me$@G~;fF=6dM|G}$(KE1 z9yfT>ZLB?!_-odDVM5WZ@7;gfj*SK;ep0?=hXqWye8?kA5oUph*PluqX{HEXoT6)x zes+-@6($G=bnw>ITRN`=AAjYU6HH`k`Ku%uvCH;a6%IpRSw*l<|2NhOzKWcgHRm$R zQ2%(A#I*7jim|%(89Ew&J8g8_@_Bf}E-z#t%UU2Z`W+(K797?sz8SX4bL8Qhw$>3l zlkG=AbBkd426AWh zYXR{0;u+FeT5}YABVwqd1d{!&znVT3Jzr)5G%#;1r*YEVQfFiD)$Do?T2ZGPOa-J- zevQd@mmlJ-8n8Prm>Aea&BOL3D(Jr`E5g=#?DdGTrB&jKrtc{L_PcWCOqv+Ok5`j@ z;~^Xq?VTDnt!L_UEN}gttj|xvqqQd7nKVQIB!fe3QCT6u9NIiz-gF8;FbU22v1;7I z1x#?kI(P?%*#hm-bxZ!`3xC))>A0WqnvHBdxh9LJzq9R0)O=8F)cF`!+Qfrl?R#-2 zJ2U&1mhp!B>qp$ouq*J4B;Erz!W!YFGfZO8fIwzY!rj;D?qOBc$z@S6#ny;ddx8}dd9>`5_uEF%EH=A4u|}39Iynx zQ7=_u*UH=B)q?q8_fD+HLfTeoVN?ERhwfe)@&lm%l! zagWO#wNK#)Duif4i^{G9emY-xyNCEPV<2m;?N0)wicY>gl}@;S{qTp9HOf~wj{`?y z9Jlt<+DDsDxT(SmUj?(EyLdjWQ(F;HgOfb4(tQ<3=&Ex~{bjW2LVvyt z@xMAFB39R(o#AN;&G0Do*T`D^kfCf&Ey)XnfhI12hyhU(`0u!If=x;is6%dKCDIXd z?feIkWv%ug;kmz4e+CEeZKfW*xzNLxA~Kqgi#vl#v`aZJABf6P^N+tbntc8GDO6Da zPXG15G^N(2ip13#@f29Z*H;S{)7vjdF+?QlhDJXQOr=W7q|HnLizMVt)PLj{dD_sf zuqs+m2q;H}A#K&}_e4^yf;rfc=HNvyRs14XBXPu|4qhX7ZDfl#ZSz*WYXfx4Gc495 zJa?l6{6GM1;I0QkwCXOAQk4LH({n^LJ=-W?8sqBwoj&JPpeP&bE0OV;>{7VG-UozO z-^hd4fadv~r>b7N?4CQ7A--wT?vF)a`-lDDjmoY0ec7AK3EFzKy8$WJT}D^305gB( z+-*SnCDOSv?gsr9&mEJW-_k`By_*96ji;&4#^x|$h38JagK%Cs5-k7BkrzFFoyYWn zz8!D7mGB~+(D~_8xZSE83rJ2?f3Z=E;X57g8Xic1!fTp6z~hBz8FABXhjE7}l~;(hU1M`lY+R zX=SA&j}M?Gf+c|2<4HL_fjxv2`GmDb`C~PyMMW}FL&?W%RAcP@ZtJO_W1l9e(>L-j zJb4d>*8cDF@cZL+*g?vGlm@&ndgO;%D)MJ&2T8^S6N5lc>O%(fO0Z~pkDGMEq-pqj z6YVLxD6OKkAJ{Z5DF!Yh?5#UQh1V}KZ3q6Fr{QUWs{awg@yx&S!D;;j-B zBXt~-cYHL(Mb<-|GcAV$R$b13e=5l%`JTRCrgNo^?l%1;#M}<24G{lz@fWoaQ3K58 zOyO$;oflWZ1NnA2YP!21BQ#3!QB98DnLJGx*I@t$tRYC2wg{@c!*&9=a>Mdj-B`M_>m;#<_l2Yti>`WO@~zRFNrLtYzO_I?+vH%C?W zYca|^wRI)2ZKg-hk5LW$os9aX6rk`0fcpe_hdy*_0w|O!l{<<_xvM8%oOl$Z80Bcb0r+4D@LFb9VJ*`9mU`9VZZYD ztYt5a;OcVn<+K$;Dg)At2Pp|hI{`0;E7s>S&6<H{yU-9YF`eOnG+_P4y=wwkrNV<*qsT_H_4Yo!LO12y1gQ1noCtHd*9=i5_UR2jZqXFqE}uHNYH(9`GAln|xcp zZRUF`YvfZ)3xMpP-2Ehruc)okx&M+wR9HC2IYoR3C9`G-9$vf_J1%r%a+}dPyl}g> zyyjO#;RE9t)?xbfo{yK0KDoQCY6k%TeIWGL@}Jshe&S1LWI}a^^A!V5MQB51oEoBd zfKb$B9fZSRS&WMm(KIOu9@|3)@;jG@7lD5~Mbh`jQb&Zvxv+AIPDQ|P$BnPIFRNF+ z@@y~b(jcD7q)$tKC7Zl1@;T6^nEug@zh1!dRZSq#%87Ic!snhgf$)S>$pyD^_0`D2 zycV_ij0FN^T_3{-Ks_)N8xqim@<`=A@CF^wJq)YH)h4C;&UeiVLFSfW?8*-JXkuze zWqH`%L8<+}P&1bIG?h!OtnI1-=%>4%kXoJ7Q}}{M@Jl_l`-xtIH>x*F_iVRq*f@iW zdGi`M;trq1{3fk9B4Xq;6n?YX6j?O-t^y>ov6*iu8s32qg2~Z;y1BRH+%*g0&QJxv zj1jkpP_VqVXvyVE3`J1w|9+0W=dJOHg7>zr*x3W3_3D}oD<>73yk!;%lAh=mjrOdm%{P==;?87i)o7NrvYg-HIkGHP zFXe)>xcaL_FGqzoYa39fR=*W^-QcySAmX|vVD>zxePTM)>fO+-kinijFj7ed7yWD? zaNHGhKnY`*%n|T?z?~@!x!t`H`iFYJGKdaYyj}-bmiZl3ngwhc_ezVCcc0dn!>2kJ zzVaK3Y&X)IDK`gB_qN3dPRH1|Z)JzljR_%`iLA!1en+J28+*mtXGqzlbf8uJqL&+ zYRTCE?t6!BHVbxI+zk20JDCQK!#)JTSCTXpRu*r_xO=3kerRmsGP@{@Xkz*IWbrbJ zaczPkt$Eo<35LjP){gX_)QYE)v|K+A^R}>4hap=>Z<0>eSO6)!!`w7Ngo>P3)6#AO-N>~Xkj6{(!(A4M7eYy@vi+ym;JU>XHol7J z{`J9;ysNj*N*A-cD17jne0&Jhjp;Hhw|)AKkYWvAM4Ia^?P~>XX=vN-f58x>OGEm_ zrkCD1U#{KA-mt3)p;*uUlOmd3kX1GYJOr&aq}4z5r-KDysE9*#ca~cg#s@OOXO(Rp zybZdj^pOL14+LMbH5VnyCVt!dPA>S#*@Kd^mq3>5jla^Yf2!_trat!N4j5w49ZFcT zr3+3W&&T{6;_zqLH#)-4v45+hwHWx9_~pW)AvnJMhg(sImaY5J)2uWbI_@^Vh>d^D zNH)ndE4sDs7xh`Bk5qCn*Ul6Z_d=^DC*9?B$1k$tya2t@1$JQvGWvZ!r0h)jP2HxR zPt%hIAEq>u4%L&I_N3U?Jj({Wreot2G!Re^jsYz{e-7aKQxs-WYRCAS%XGENEsKS# zv1jwphmo@ieBJJc3$W;BA&nJguNNbvvKl>$fD&8@Ab1yCr5%IIDr?(Yaa)7Y0hVol zKmImuvF=qG#_60?`enuGo#8N^XRd*JJafS4+Jb5Aj3i=12mr7r{YklZFJ>2UUEDzy zn9OL~VF2?zZmwuLu70A%__W}vu1YU9srMX=d`NvM{gWD*l3uv$(7vpz5}zl2c>LS& z+%tn|?4f);59GV&zG1>`dEh^JI@}l;Qo*1esDaERPXP40?9Ed$M|4IcLd&TTAwFi% z*i+IA(Q7lI6Z#O3i;5Zz47mnB?A+8PulG9BR>W55^7|tVc09dS9e{vgbw=dAi?~#k zgGnZ=ppAwQealgqpxk!kdwGTV`Fq{&Jv6Xppi>7C8l%dRVjhr8MXL=tmfH=F_jJgT zJ)QSp=c!vu2|Cvk{3ZJiWWSDXTkfV&F5)`#9ToeNL19FZYqky}Jzo9%He#Xn!+wt= ztN#!!JE9@_^LPZ!y>X4_j#Ult8BTpNqvlwrxbdu3NSZ}Mke>NK@TZ<=VaPo`Ts&d> zY8}Uvf#8K!LN&3h)H`4kh*v^aPOZ^t_JLE(KkdUeR>MnFrQ;g6y)je3Hhjn#ji&n7 zyv;b+)cXKkREF2)B&XM2GV$~yR(?WCy&f8}f_eUG2G*pPyq?O;M(bJ3#4s1qQx&E2 zTo^Ml(MUbcqAC4KdgPb(=}RMC<6w)UpFuZ$i~5F3_e2fv&qcJ^9(qTZ>%U6C`1diC%ghfs0-FhwTQW_3TRPt>I&MZHEZgvSI$5BbHa)Z6cqe0TRJ5EgJNL@kmNLJ~T$5%|pXHeYJyzFfJar95Dj6}9(X zKVvLgZ-01_8GzO4^Y$qY-Y9d*6&|iTGLP62UU>hx7z(^>Wt{t2|$g02~!yS?z38lEasXqdYw=SaM6v9$uHlI~QqDjORl>&L>A zwe=2@0Y^nc+%0vlVM5pK&g)KoHocl}^hyq0OQWE1jb!-O0&%YlYQZ0r_AMYD3j9JrN`R?GrASJSI6aW{i}LQ+c$Nca3ROi zChF~7Mq%?szu`0xsm4zU#LK_$pZT}3fS9IDrx12mbELv}0obNG%Bpd(Zew-28lSnS zZqUK_`|?|h#PwRxO4LR^b|VeUZ5Q7Jb+u3TiK@|Kc=%JZB>M9$9v+gXfdjZ*`-#8& zx0KlnMaAPN3RFMTnCAIFexh_O8TT(G0rWXgo^Z}Pe1CWljQV4kTDQkG@}(o$Qz8z% zdb1376z308{OoJ2{jw0RbRbf;hx4eZmi{|JLZy(eI|HE^SXSM4a4Yk;y4;}%tt2c` z%BY>c-dUE0lRzUY)lsA^^`#(3B9jdOopc>Q!_2t!d%1*u)ky#N(SY#fqvf|nmgAIr z@%*AqNJFBl60|bqQR@<3WZOe*7LwsDP(WX~{7N(r%Ls9c+Z4F5 zz#`C(yR9)d$&QUjLAUfXYP9aP$^1ZGsTLcy2+zHdn&;OlR#m}0v*~u+gkoS;|9J^z zfDMgozCmI=822JDH~|AlyeC6jy65?$n0_`73bNklos_*5n>)yPL~i31*3f58sAS>z zK^bYKFR~t?f$u$r7!gSk;3zV61$6mU?yhCPx&C`c$oQx1KyP0u{b6V#p^lF&b$bFz zZ)=~td~`yKJ|7RGKFD5-R>d%W`go4xe2q_&!WPGML60TDPex8_t35H6MN}v5fse5r zbHbt{Q&vJw7*`p#pDq)j5!%Z)=>_v9?l~v{!o0lzh)&!gq)ld}nqg^?H&-UJJdLhU@E0M2YiqEj3 zLOpl2?7Xi*x_k=`k#!C8SrEU)HsVGb*M>dw-iG05EikOK0>=SFJ4^m|LsAFED3Us7 zl<=lz3Ea&27Z;se_MG`op9x--XSKGF%>JgMtjT`=IzOt7N+z$deV@e56jycKJX5L8 zPvym%U#QbKM2inOt{Ai=5L>(;a_7Ymi6U%})!O={1?g;IVLmU7JjuG#XwEHtIX74w zQ>u|HBz2L*Q3gsSUa$Nd*u~5Z#&UUlLuAK1705lEuB;8Ojm|9@%V0M#o>#b+(%L`cg2eY+LB)FI0o;O*RFdVak)~EkmfvSH8SLiey)&vK zn;UPcQr|JtTqhGm8mxK#k*fw~?k)xmIeIrOz@+-kFVBxGh@i)v)WhqzOhf^T``qM5 z##ZdYr~Qi!{ArO{akVD=;^8raxde6RaEKu&WQ|p;L6>_Z3n=)Wc$~{!Gf(s&1e%B- zkB@~=eq+o}Y-%efXJLcIZ2|u1;*52_sejwyz1R(gupGjGEEwl3udR^LJ~qt&QimuD zP0w`?=?$SY1!^&744T5+3JH(Jd`*QkKjbEWKH>1mA5JI8)1;JS1DtiVF8p8Ph*B7r ziCz&Xrh%{7*xOsTd%nwBs}BY4KLQ411#6eDN|pfz`Me4;Q2>1%Mc!B`-JL^oi(cmJ z9}w8}TI`J3+T>I^`v$n%v4&kc%u%H*$Px|DdtXiGSXFomyH1a$ap-#OHCIC>!?uAl@q*pamh0p6{BppgPx7|iD%mID5Q~=& zKH1?+D?&IOxD7x(R;{gJbQi5@S$Lyz+l;a>NQlw%Dsqqu@mtx&@NZIk^`#X(M*!VD z)zP;BMWI~Rx&~wJ!f4D-hUNH=roy6O-`fmLu$owTbBcxxd4JzCH>_6-nTR|Dwlkn- ziC7%bPwD`h)?-(GHB#u-)av-ecUX8YF+wm&mo%tNc%07vHr1U@Xl*UflZ0SaVj7Z_;L_aQHJ~?Tc90-@{^-%ay!ps{DLzl=OVN=s1o5u$n#Gz zHQyuI{2zLr8=*cugY*;T^b4WP6b8AgPteLB9F_O!d105|K@y2Nhh3vTP{=lNv&vv9 zwqp+wA1QzE#>~7+2)$oIqBSRxr~D<`M&ae(b<=0QJ7`>A@-tjr#F>>(ai$@(cuJ+V zwf$EW2l^}_>+M1=LGP5F)8s6h=QEJvWIcT&yA!0dD{bvO+<&*Gah>5RP7=Q~qulc| zTf>k6*7TG%#ef$@jd{R7p3eGS&Lba`Q)#Kc@Kc!a$`w%`*@`l2g?iFX0LV5m(ei8X zw6z@5b2l+ZODD9reZMSd5cZ`0kY@W=d3oCow~mlwUFmpNMR3%3=!lvZugkC~$heR> zq2w^Csh?NCFc|7(vwC~phA{ty5hl$<=M-tdr#o~C5cp!d@MZj{suOf-x*Mjaf3w{2yguGyX>uS z%bH6)0B+RiN8ByE2;#y*oLv0MY}o)D1tHqZTADqt%I_TR%u!M*N70+)B1_`WG#f&KTW);hs^T zPH=7V-%V5si=%MvNSL*V4>krzLmA1d{jfymaNelC>uBV-Ds`JQ3ae}Cm72o)^~<${ z<6Bm`o~YXNs`M$Fsd24XH}mRY>vdML@^298j@YY~UE$lt2j_X#i$tmq5@PvUf}jx$6j4bNLhgdlr|0-p_xpR(QP&h;j;YIiIQ zT1Bvwr=bQUW%fu^_idKns?XMZHGrF*Xhhx zdZ(?k^MZF9Z)L3z2{PrVC_XW|REFOPW|R^>bSi3<#J_wsaaTn5a%(U{tCRPr5t8Fe zLz)`~L%iA)eBGxZVc|_W3p(c4r5Nl6yza)it34EOh*BmD;zZ0&ixm9o0Sa4{Xc5So zVlGjw@4{s3xX(WOQlqReR6n;ZZJ4XKoUvURHM;g77;Ksh#L8}D z_nuCFGDTMwu`LDYe;Y90wfbbMrK_7?SNezUg_FyJA&q?BSjfFj;!D!;R=}rtp@{8# z^#J;dcYEFakC9AgF>Lb?NE#=PcQ?1xeu4uuHp+ z6Pp7W=@^zX@aclT=(-JCp>ZSHOUr*j^Q;2@Y;A}jq8^Z;+rV?86y{08O3e9bxKT{un$|K&7-5SaO{fdqNvxX5 zPLC+^gS&cV-Y&#s9Y3*~?TH7iEs@VZvvW+T+l$_(USlm~T+0N{H=bGP~y6_P*UOnXQ(}#)M)Y(NA)vo88^dFd`cX!blJls%i<%+`k^3;_nVkL zXKZWicG04@J?KQI_%Iry68q37k6XCT*-oPse^L|%{Sq3=nV*uvEbooth7Ji;-Kjm@ z1MOv!U$?Bl%kB=fM~$Lp8_O6lUQY-7dfuqEYKCfC^?sx{ z)V1~JIC*FL)yT&7F(qAX`nd)_&0kyDtf4IvWo?G;`9F{H-BtOF_Mf<2;vPLUm*>Yr z!QX{2wPVDg-Hrb#cXuWogfiWqL&bTM2T)NdW#+{YK$Rz@9`mei!vC|yD)<& zVUQ@%2BX(#6E%7b?&SWz&;4`$oU_mKp7(j*z4uvrtu>S-8yq-CrVBVX3u8Q{hBPLv zO0#IU(>~`T>P?WNH-Q8OTG+Ww7pW(&|01Fx*-iEf-5;MCzcCFE^(@fc+Z~f0V{gO~IJ*IQc^%th0wbA&h2Zfj*Eo@q6%sh%F z_%B|?s?0yEyME@|8X%XAQD(1Ge5(cwcy5Om?-?7PdqBpD6pL|NNLp|nDXKi zd9Cy5TB%dWm${TzSnMqHt7ku0p0Ul`q1mZ-B|?-2kas2XvU#ky;{KCaJhz;BO7H7H z|K(GMv6(8zXDzYwZ!i+`(d+iLj}vQe1z*y;^XLt|<9}b+{+KOm60zY_n| zBrod2cr+675m}jw0s*UYs=;;f$>#&t(OpVe#)NnNTm?cg>oX7TEz;Me6<$gKc$fSP za^ePpEviG78Uc?b|EjbiTdWhnj<34sT}yA>9OgE*-r%j!uJG`Vxb^?$K@QOdU#&^e z)>S;~dJ9I^*3^g0G=LTq9}Wl@?z}$Tn3a%^Oiqkz>gucv(=Pd$myYYpQw*P`vTc(~ z-alcJxjjp%{uUvh8e{ z8WenRvF*=RqszTsOVl_$so4oJzt*XGS6&fV!9vnFAAM)0y5+{rZUfU~49E%UrKrA#H)sfnDgpRlKY=r%Os7>s$*;b0G+Q4 z8!|!~y93Y}Iq09YAna0dvgkr!X~Oy9%%<^6;q`m|T|zDf1%*JZB)6zJu_qzFLQyiZ zng{Ss;7j#m&FksHfDtWY&i>|J$lD+3NnTH9#!BZrtQzEZY-O+xAuO$|C(AV|w8l18 zD^LwHaX&4yHlsg5QzNWuUDK2qCU~wP%akJ-5=oNuKA9X!RYl=e-YlG6FmtLDJ6%y~E zKc#0+WWvQwz0lp7$9=p3q7%=Jx?;p!a@%wmC538}UgRDpr42mG@b)T59!aJxFdpc< zToU_*mlH=9wu_r5e#v-o?dCQW`CL;z;jg*AS5Ady7LEnWs3jhaJ+4cC&xYZlvOS8V zTniiWfoS-g?yjNovqZ3rz8wX3hp0r&Jh$A`wZNoQwIzUaqMp?JbldJ{gZQ&{5cP|O zcux=6(RJ+6Oz6}(TPyq!|BiViSYCIGF-T`eftXvc5@{POGwHi(!?U?>R82y!*-}Ef z)d{TvF{P-thvhb}B0T(tORLQA%Wuxznpq&DX27H?A3HjouMdGvqfU zIEzUJi92&oHMv8cnh%L-78exBB2wPr?SLUBUY%D)WIXxFOFMPM=(fgGa-Sz~rZ;hl!b_0b3zc7dweBoRgBK84}fn zy~a!Uf=3qkVlt>8i)o?0%jiwJ`5DiLgYB0IWOQ1R6Mi*WfL2Gn$X3@^Y8vB!In_yf z*iklg33)%r?(BXAWd=yCG_RY*yR=M7&hknve)V>@xD62dll#6RzcDPRi)g0mom-n?7+q+Isg^)E!0+V-){g325<`Y=nxBSvYm zHMl$BalCmE>R_m-zA{HaIR9LMs5R#B(Bhc^gg^JmVfkW=iuWh)sIe%C3ND=< z4dlJX3cvE;*m{H7m#1|~*T2a0i}OYYYFf*w$oM*n1;!YX+nrYbBq|oed)#KcIVEDt>{REFBItLxq{wPjblk7`L7UYZ+_^F+ z9aiuU{&1K86%`H~l%-fcFeN3MIbiC*D<2xZ-5*xQ*#+AuwR7p?|`Cjo4u( z4WzcT)OFerk&?rQOB58gLGdhc;Ch_e2QNxE!gpj&Ta3@)MG$YOw0hK+hvKQWZzZd> zvO{rU1@!?hdQ_F-@Sf&=ngpedhJrXMNoQB*eC6xRWhx)QkFCarYCh0(18BOYOSCFI z>|SN4vLl-{kK!TJM6S3lR;y+Hke|LScSjeYEhW zH`&@)Hss2ps%=_=+L$aN$MSy@5#wyiS(tut?k=0w{UK;rUFr!k;}Cnu@Jd{2Xg-yO zd#rcmZ(dU`b9M9#U6v6#LsiL84m<&RQId+YF&e%Vs9GimjcC1=H2#JE-a$^(ecle- zv#PxCjuXrKuHq1nMcLekZwWrBD9m`rqta%FkMg&FD$v4KJ_%Cb(0`D^NJJXzacFx- z&w2saT8&f{GL-%5xbH=>#ggde?aR`gP zk!R%*}%b*?VFmqKvmCXgH7#yK-09J>}%}qA6;Mt0=f=xZ*WZ zc5yhoKmD&=!~JUn)&OgVfH@69%2Lm5rfn0~uU+EQBu*6UKWl2ebf0LrwM`+hQAum~ z8tC(LMpbPeOP4Sy{L^b7d^-Q1oEor%hu3H}BUYseZU(Vgwf$jzYx%# z8VhO>J*xsHeJC(K6nLzwh-Ip6i@sN;7M*L_(zQNo}OW>u(0QIgmR{?fnqg623AdL#JZ4~dU)wYMA_Ja0&=CxP(R|Txx#X{Ra zwQNhry7SRvlKXmBg`eFCLxTgc-f`9xB`VI-!=h330+&0*?k$dy|6*uGk5Z0AwwDRs zQw~QPxsqY+4JHWp*E)`I)%l?w^=;t!k2fSP9+B!;3f$CE9%N7OJJf75FTc`nMXCI- zgn$+(jq4&6ZjQ&eDTMvHP`KkDbJuP`C$@wv58R8@+wA8#7G#7ZsP{3=MOS1e3IvNl zX-b#dbaJ{yqKWAE%(DAB%K4W5kFnm$0?!!%@aOQ&8`_SVtmrV{j=G98xl7LeoEol+ zlbS4+I}b7o*9Q8SL^(z-Sc)0TBxWqdvEl-|8wDPzvG32IcN&uy#UWSQKYd+qF+V zXc^(q@;ieK&EogH{NIS`)xM3N)-davqmIfUol&#{CZb;;!s^|`e$^vw-8WutZqA#R zk+75G9Qm{H8}DNQga0y?T1RxSIXUy*&a6DLi&lD!+=mi#^S+E0DXVmL=h7QK;ACRV zbD^A&3T?RG9ZH5;H?6_YzZcSj`H|d3*L*jEl}W_!i81$Y0+x?j5jTw@+L_MoKQu8A z1mXki@)bjJg>8z{dQ;u;x8^ zc+O%uoZ`T+hRU0Xf2Wvr>m4pMpYA2Um9E74w^ZL|77ZmTEhdl zz!7vjtTW<$Wh{E)&9xtN`n$jV1HFgZPLQA`97Wj02~Mqv7d5u~NGVpmJrE2gQ5EyY zXJ2nPo*Bh+>-4me#{aR#f?wD0+=#NOiB8GzyoqQFJkNGq$4{kz?75^78wCykLJfZf z7KXe#P}a9Mgyz9*J?E!F*jvr9sSw7c)NgWRc~cute(vD!Vm6get6E}o9{-%Kh5QB$Gha(xMeyqiQ9u=m0eGp-g+ie5#ear5k5OX4RtrG&=iH==2H+? zrWX$HeDJ#Qv-GbT;$T5K#dHUBj9mSf>1piG3`hbcVm_3XpG(U)6%B2TPR61sXO*XZLW z$6sHr^-bYybQ)`GADGDW^#n6qh3@dW2W`Q_>(j&E*d0nn=z#gSv^_5EtcFrERP?nnty&R<{fUuGCMQ$B72<<;}4$k>+5LPH0EoCtu1Gw(xxoY!WF@%f7z%3Utyhw_8HZQs_-g?nUopoQp4 zReM(0*$LX_-~w9%i44ulE}9l>BL>PpP;BZB6hy0gWKlknbmPR|SyXWn&vAJv2m$0h znnb?>%JMT5hw#SoG70GC&}B8euc-wT`K@kU!c*rzPm@y*8X42o53a%seF!aZO`%6U z+Wu1yIv~s$O&1xETBC>?MGdZH{)OIo@0%wqgNW1H?MsY1XUY-@@ zoHde&veZsAkY*j%IU&bMtE#b1J_M?S&G_=;I6D+})uC`(kve$95a&peg>u+}au5H3 z`A@=+0iV{L@W)1RS4C0#6VDgiLHtI^$+a=lnQqC1)JEV0#_~ss33pzP3W!RTSXq(W z>=WJM_+iYR+e#>luE1|iQ42*e!>z<$*TRC(8~WX@M$D==8jHGu|DLqmCB>0!&uwwq zZ71kS3MP&qjT=aDF_K-t$y{Pmdq|B9o%%UjY8oFkH8pnY^nYLf|C^~jnfFv_4#&l3 U3_SH%^Isfw6&+xml1=3Q0A(aMjsO4v literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/Square44x44Logo.png b/desktop/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd2ee90e8da1a29fc3cdc867c72e3818f89fe3c GIT binary patch literal 3038 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/Square71x71Logo.png b/desktop/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..92ed5c17937becbb84fa604cb1411a85b906ec80 GIT binary patch literal 5015 zcmV;I6KL#-P)+bj7UCy2FKkuC8(snm*YXxg= zak%GhXZimB{M-3oTkQXjeh=#tIxpVX*l6baaZ^*1FB|zJ0)rBMqBsYXHgGcX{5CKQ zBNRe#I^%jMZhxC|ZiYCrLX>lQ)kgJ1M@PrnmX?;lxk>@hdZRl|fjmP6F zOw(jpVk6(PZJQ+$iL*5|H9x?utiho*%zIH*U@)N?Oc;G{;>3x3@7}#~$)X;j9;(Ur z3oO373Fk2=E~uZ?atEhSzYfYT(f%P&T#nDOtRS6Er%<&O;Mue%T-T+xPK+8gD!k~j z+OcDYNs}Z2rGO9@;ha#t*RPNyuo@Z~ga#CS7`P6=)~ld#Q@f<3gq=Ba zrXH71*VWY-v>bfjM-$vq%gV?W91w*C!Fh(U`dPyk0YZb;*Eo$wXJ5d%2Icc8Bhhgc z?v*Hx61Yy|I)U>^T>mf1ev}Td>mMF`@WF#x3q;x!n2erif`9?_(x_Wm%83B)61Cky zSLOBf^(F=@^dug7=%JZFa~=jU9p&?}SWHrtC>AZf2F!>8n);vwO*r|;Bai$M@BRw6 zTGcY>jDSRkLEjNDMDc7nhrY>n8RiX+<`z}I69fEL$8jc+Q1d*GfmK;5mGUD4Bi7}8 zk2#dmUr(C23vyrz6@Ya&z&e6HevW59K%alSq>Vrg49??m`9x`H=?w%1CJ`vvpw+Au z<&Xi`{X=L0U@9W>n2#Jfbm+2^Cr@_c`kqS`91RSX&@CAB3s^b^*1m^lrYgl!^*!1S zSh-zYT@Lz7UefM^;+UyeKCMJ?s6bDtz`;DEe9717`=|~>ErVt#c(d8XHegUws*)Rz%w5uxE#VI(n`${7s)X+X-xKA zsQd5X`hNh>QIzh=%1T;WaR4v`&qm?iIJ7?n|zP+ZdBV32=SR&SUC zNP@Tm-0%#v-II?!_E;6XU;|B*Dplme95{q$2XOftlugQ>s>J=dsNM;X$d4+!q`|>N zp2xEKmt4Pt04ES0#)R)j-HTer3g|RkhE7zE?-a`U>9Lh$3^wmR$4t=E< zz)%EmP>jI!>(|>DAO(0P0HE!36Y{`UYM*Ukje;cZ}`M&$^TZQXY6!Zr7d=9c=48R&ea)i{h(sH!yD4=}~=W+1O?o(mQ zY*~P`9i8t)c`6d($mK9eF;FlaV?B=c+Cj)M7|(19fT7KJApmJ=odOldp`mpMFn<@+ z+=Kdyxc{qT$Byk=w{G2^*uc^Mdx(O0f-^x~`}uhLN;5j(>i+-%8RkJj@~yac24fnj z`X~q-i{dws2Nc|{guJ;8jo(I{A?|V-lRtv%qXZ&Kw;E6hPFLW15(f4uvXXQ0vK8l1 zwIbq*uzUg1z9E)tC+4sfg!)Rs%Sx|ZB@itjEj!X|i=&zfI-Ef7^!A?!Q~)Ci2tW85 ztU}{OASy*G-vUu7Ze3awaC!+j9=%Us(Q;AT685IP3WFMX2vb4G1Kfj!YAZb)3hAPq z=O8yb0g_pic+N#8p#g}hWJ`JUCeL$Lr2Zl7sk%$uI;}V}Uvf*U9bo?qZb?Zo{I-uJ z5=S-@sBFXF?1G&8k-GOrA$Fh&*1f%E&6@XcU0O_VK1%P{hx{^WGNi^Iee}_T%9eT# z6esm-g}Dn0&4oLQnFF8$-dbaLg9KElEo=nvX*n_gu>eNfGqkHpL4Mlw!#ius%F1YI zxw%-l_|8=xpFyV8?+UJ_FEw^=b*2fFo}1f zn}{lrK#ye(jJUNlGkkB8kEi3C_;$)?Kr=T z_W!Cq=y~(z$qoO$a&+`K9(dq^tI*#fRO`^zIGoAel7=JNpl?s1z8}wC!It?mjg6~+ zTfYO_*$pk^4wVW+++YZUYp3+0f)L|YA>D55;k{1Z@!rWp(anB+tX#SBQ}}Qs?Nm~X z2Bk__$fgRjCQ(0&29KkD1RxzoJEx*;EMLFezOwpC-oZM8n!Pn)Bz>jNY>enQR;*Z2 z4GtNBRaPksGc+tekut>5wfC<*%?3F|j1l6;_8ybX_IOw$y{m`mv@K{o9-&v0+9DizRH4 z;-)ZcVTFNfa5E*kMtAn^o026)esQFgj;F=x-KRybXN?r*q>&h7y>_@R>jeh)am^j?t07XFEfn5*~9i2QSk2C{^hH^!24Ug zeLb9)30U8wvCf7;2tiIzDhfAvMyjISup83p3_Q4l;O%`O7jGhF`P$>Rx4j!B&NSAJ ztdhPpw4}$9?RB-VO|N7D_t02&Sygz^;KD(xf8Mfi_iJb#xhE{t>wf98w^fKl^6OY; z^%(9X)8gd@EongDQ+`4iegM0Bi`{v0l>(^;pvGU+T20e4pe)*S%UIJ2<|EnUtJns( z)+w`1K)}KPvWE%+0U-qgl~>**hZ{mu-NQdBZia=U$!jU9OJzaYOh{p6oo|J1v` z4}r6I>#R4+hsCdVyF9`^JF5!=i&r?T^F;U0H!Wzpl|Z5U1kB=Xx6HvCKZ%z+R|LLb zfh%YN(pAm4(Fi)1Slml`fsx|Fo4>y66oK2=)X23gTC!~h5~R$BQJ)_#x9tE48W~VY zGt$5%895942;?e^$nWQ}Q$=wOnd_L$bPSg2bOoMm34HrITb8_VL=p7@`$$=m;kk4t za&S_QaRk3p0bh|y4N_e1ZsJB!tjYhxGZLUvTz7&1MbA92Z zIVlk7uJ3J~?SN|OtFW(7ZO5NXL3C&2IO}ls)W%Lf9Rxyvd;HQNu@y_7nE5>;BR7ka9}_BI zzp;gtprTuY{VM(=`@ne4{wMUxY4U-@SP4DHp zlq4Wf?erboA_HpLu0K)5pA4gWG%+O@g!RgY*Q9?N|o-JCRJJ zzbTAx0-6~A{(I?(3FqASz%s_U34Z~M#(gk0Nqq*n?DLQ%5BqY(Qa5@&>TD!GY%aFCT?%F&C6)u*|cjZbqP+1}1(``0k`FOWM!$vDI@xmF-Km z&3eO*SyTPApM4*4Z<0+e930wq6>JIy05`!MFr5v!k*31L#5?N7XJq0O<5_Q75oIly z|7l;mB4BYYdvf+Qekfd1oZqzw5Q;GZ7PHOtK{pIvfV(i&OEWHA2|lo}mRS>|al`P_ z#mUR###9xOJn#1?TaWR~#%AUoSH4?jry-=M8_$^{a4CEw5b)beV$SVEWv7>3F{x3R z(@_cuD;SJCI zFcl`lS3_cF_y_!`s+EiIxs7+Wy*7Bi@dR;bZDMg=g^{lK>}a>Sub9XM1KnCT196!K zJ8}AWW?LZKFT)w3bS|?u*4!X)O6+kEw!Z@r?hXCa8xYK?=xb0Ce`5%~8UlY_>Kw5v zkK2wp1!{TBgHX!g%?9c*etpABH&@f#~0g zlbWXBnSTJM16+nrq?J7iWs*~7@pQLOlQgsmKxP&>+|aIu1t*zA0Ky_CK%AGM#Gf@x z?`6`Yg>jDF)8?69$@LdaqoWB2G5u@JRmr3MIPv`7ZV$V7<#uLO>2r~FcQ9y$Z15l7ltRdYk65y&|BQ31S zDuUaqI6Ku9JX*MKmFMO$0Y#kDyrAvZ@P=C;G--p$%X16GkU*%StZkl)*C|&KGCv?* z7(~U^%?n?A{}oEkHKh5 zgk;Z#JK9fhA#Nqd6|%$1mxJ;K2K~Y6wxBu5_nW=pj-Q<B0+Kr^K>pz~LaL#;Ev@7b~-DxHM<682_&Mj$N;7<#I{3U!3gF1u1rfUtXZip# zh0YghU5J80Xsi8b<$r#pBww`k9v^X^H_*J{E>))X3f ha`h+iZ*~>!_&>An?F4T6IzIpa002ovPDHLkV1mJXp@#qf literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/Square89x89Logo.png b/desktop/src-tauri/icons/Square89x89Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b003d403afe8b3fd84815c64a071a454abeae7 GIT binary patch literal 6339 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 FV1kJnT`B+o literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/StoreLogo.png b/desktop/src-tauri/icons/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..c69dcb594ababa1139ff34201d645db18f4001fa GIT binary patch literal 3513 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 literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/icons/icon.icns b/desktop/src-tauri/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..548fb641cfeb7280f14a24d2f61d5600c5a16296 GIT binary patch literal 179578 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

    ;Y8)MMzZl&07I5*@`?{trrB!c)hg*%iYdVm=?} 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 JU83!X`yXz#xi0_! literal 0 HcmV?d00001 diff --git a/desktop/src-tauri/src/badge.rs b/desktop/src-tauri/src/badge.rs new file mode 100644 index 000000000..632a00798 --- /dev/null +++ b/desktop/src-tauri/src/badge.rs @@ -0,0 +1,27 @@ +use serde::Deserialize; +use tauri::Listener; + +#[derive(Deserialize)] +struct BadgePayload { + count: i64, +} + +pub fn register(app: &tauri::AppHandle) { + let handle = app.clone(); + app.listen("bridge://badge", move |event| { + if let Ok(p) = serde_json::from_str::(event.payload()) { + let label = if p.count > 0 { + Some(p.count.to_string()) + } else { + None + }; + #[cfg(target_os = "macos")] + { + use tauri::Manager; + if let Some(w) = handle.get_webview_window("main") { + let _ = w.set_badge_label(label); + } + } + } + }); +} diff --git a/desktop/src-tauri/src/commands.rs b/desktop/src-tauri/src/commands.rs new file mode 100644 index 000000000..edeb6cf8c --- /dev/null +++ b/desktop/src-tauri/src/commands.rs @@ -0,0 +1,137 @@ +use crate::servers::{ + health_check_url, is_healthy_status, normalize_server_url, ServerEntry, ServerStore, +}; +use crate::state::AppState; +use tauri::{Emitter, Manager, State}; +use tauri_plugin_autostart::ManagerExt; + +#[tauri::command] +pub fn list_servers() -> Vec { + ServerStore::load() +} + +#[tauri::command] +pub fn add_server(url: String, label: String) -> Result, String> { + let canonical = normalize_server_url(&url).map_err(|e| e.to_string())?; + let label = if label.trim().is_empty() { canonical.clone() } else { label }; + ServerStore::add(ServerEntry { url: canonical, label }).map_err(|e| e.to_string()) +} + +#[tauri::command] +pub fn remove_server(url: String) -> Result, String> { + ServerStore::remove(&url).map_err(|e| e.to_string()) +} + +#[tauri::command] +pub fn check_server(url: String) -> Result { + let canonical = normalize_server_url(&url).map_err(|e| e.to_string())?; + let health = health_check_url(&canonical); + match ureq::get(&health).timeout(std::time::Duration::from_secs(6)).call() { + Ok(resp) => Ok(is_healthy_status(resp.status())), + Err(ureq::Error::Status(code, _)) => Ok(is_healthy_status(code)), + Err(e) => Err(e.to_string()), + } +} + +#[tauri::command] +pub fn active_server(state: State) -> Option { + if let Some(url) = state.active_server.lock().unwrap().clone() { + return Some(url); + } + // Fall back to the persisted value so a relaunch resumes the last server. + crate::servers::load_active() +} + +#[tauri::command] +pub fn set_active_server(url: String, state: State, app: tauri::AppHandle) { + let _ = crate::servers::save_active(&url); + // Grant this origin the runtime IPC capability before we navigate to it, so + // the injected bridge works — instead of a static wildcard that would grant + // IPC to any origin. + grant_server_capability(&app, &url); + *state.active_server.lock().unwrap() = Some(url.clone()); + let _ = app.emit("active-server-changed", url); +} + +/// Grant the main webview IPC access for exactly one server origin, added at +/// runtime so we never whitelist arbitrary (`https://*`) origins. Idempotent per +/// origin. Mirrors the minimal permission set the bridge needs. +pub fn grant_server_capability(app: &tauri::AppHandle, origin: &str) { + let Ok(canonical) = normalize_server_url(origin) else { + return; + }; + { + let state = app.state::(); + let mut granted = state.granted_origins.lock().unwrap(); + if !granted.insert(canonical.clone()) { + return; // already granted this origin + } + } + let id: String = format!( + "remote-{}", + canonical + .chars() + .map(|c| if c.is_ascii_alphanumeric() { c } else { '-' }) + .collect::() + ); + let capability = tauri::ipc::CapabilityBuilder::new(id) + .window("main") + .remote(format!("{canonical}/**")) + .permission("core:window:allow-start-dragging") + .permission("core:window:allow-show") + .permission("core:window:allow-set-focus") + .permission("core:event:allow-emit") + .permission("core:event:allow-listen") + .permission("notification:default"); + if let Err(e) = app.add_capability(capability) { + eprintln!("[sure] failed to grant capability for {canonical}: {e}"); + } +} + +/// Begin SSO in the system browser (so passkeys/WebAuthn work). Generates a +/// PKCE pair, stashes the verifier + server for the sure://sso/callback handoff, +/// and opens {server}/auth/desktop/{provider}?code_challenge=... in the browser. +/// +/// Callable directly (local pages) or via the "sure://start-sso" event (the +/// remote Sure page can emit events but cannot invoke custom commands). +pub fn begin_sso(app: &tauri::AppHandle, server: String, provider: String) -> Result<(), String> { + let canonical = normalize_server_url(&server).map_err(|e| e.to_string())?; + // Only start SSO for a server the user has actually added. This event can be + // emitted by any page loaded in the webview, so gate it to trusted origins + // to prevent a rogue page from opening the browser to an attacker URL. + if !crate::servers::is_known_server(&canonical) { + return Err("unknown server".into()); + } + // Providers are simple identifiers ([a-z0-9_-]); reject anything else so it + // can't smuggle extra path/query into the opened URL. + if provider.is_empty() || !provider.chars().all(|c| c.is_ascii_alphanumeric() || c == '_' || c == '-') { + return Err("invalid provider".into()); + } + + let pkce = crate::sso::generate_pkce(); + let url = format!("{}/auth/desktop/{}?code_challenge={}", canonical, provider, pkce.challenge); + + *app.state::().pending_sso.lock().unwrap() = Some(crate::state::PendingSso { + verifier: pkce.verifier, + server: canonical, + }); + + open::that(url).map_err(|e| e.to_string()) +} + +#[tauri::command] +pub fn start_sso(server: String, provider: String, app: tauri::AppHandle) -> Result<(), String> { + begin_sso(&app, server, provider) +} + +#[tauri::command] +pub fn get_launch_at_login(app: tauri::AppHandle) -> bool { + app.autolaunch().is_enabled().unwrap_or(false) +} + +#[tauri::command] +pub fn set_launch_at_login(app: tauri::AppHandle, enabled: bool) -> Result<(), String> { + let mgr = app.autolaunch(); + let res = if enabled { mgr.enable() } else { mgr.disable() }; + res.map_err(|e| e.to_string()) +} diff --git a/desktop/src-tauri/src/deep_link.rs b/desktop/src-tauri/src/deep_link.rs new file mode 100644 index 000000000..8b24fa186 --- /dev/null +++ b/desktop/src-tauri/src/deep_link.rs @@ -0,0 +1,52 @@ +use url::Url; + +pub struct DeepLinkTarget { + pub server: String, + pub path: String, +} + +/// The result of an SSO handoff deep link: `sure://sso/callback?code=...` returns +/// `Ok(code)`, `sure://sso/callback?error=...` returns `Err(error)`. +pub enum SsoCallback { + Code(String), + Error(String), +} + +/// Parse a `sure://sso/callback` deep link, or None if it is not one. +pub fn parse_sso_callback(url: &str) -> Option { + let parsed = Url::parse(url).ok()?; + if parsed.scheme() != "sure" || parsed.host_str() != Some("sso") || parsed.path() != "/callback" { + return None; + } + let mut code = None; + let mut error = None; + for (k, v) in parsed.query_pairs() { + match k.as_ref() { + "code" => code = Some(v.into_owned()), + "error" => error = Some(v.into_owned()), + _ => {} + } + } + match (code, error) { + (Some(c), _) => Some(SsoCallback::Code(c)), + (None, Some(e)) => Some(SsoCallback::Error(e)), + _ => None, + } +} + +pub fn parse(url: &str) -> Option { + if !url.starts_with("sure://") { + return None; + } + let parsed = Url::parse(url).ok()?; + if parsed.scheme() != "sure" { + return None; + } + let host = parsed.host_str()?; + let server = match parsed.port() { + Some(p) => format!("https://{host}:{p}"), + None => format!("https://{host}"), + }; + let path = if parsed.path().is_empty() { "/".to_string() } else { parsed.path().to_string() }; + Some(DeepLinkTarget { server, path }) +} diff --git a/desktop/src-tauri/src/lib.rs b/desktop/src-tauri/src/lib.rs new file mode 100644 index 000000000..7d3ec20e9 --- /dev/null +++ b/desktop/src-tauri/src/lib.rs @@ -0,0 +1,151 @@ +pub mod badge; +pub mod commands; +pub mod deep_link; +pub mod menu; +pub mod notifications; +pub mod servers; +pub mod sso; +pub mod state; +pub mod window; + +use state::AppState; + +pub fn run() { + tauri::Builder::default() + .plugin(tauri_plugin_notification::init()) + .plugin(tauri_plugin_decorum::init()) + .plugin(tauri_plugin_autostart::init( + tauri_plugin_autostart::MacosLauncher::LaunchAgent, + None, + )) + .plugin(tauri_plugin_deep_link::init()) + .manage(AppState::default()) + .invoke_handler(tauri::generate_handler![ + commands::list_servers, + commands::add_server, + commands::remove_server, + commands::check_server, + commands::active_server, + commands::set_active_server, + commands::get_launch_at_login, + commands::set_launch_at_login, + commands::start_sso, + ]) + .setup(|app| { + window::setup(app)?; + let menu = menu::build(app.handle())?; + app.set_menu(menu)?; + app.on_menu_event(|app, event| menu::on_event(app, event.id().as_ref())); + notifications::register(app.handle()); + badge::register(app.handle()); + // Grant runtime IPC capabilities for every already-known server + // origin (saved + active) so the bridge works when the app resumes + // or switches to them — instead of a static wildcard capability. + for entry in servers::ServerStore::load() { + commands::grant_server_capability(app.handle(), &entry.url); + } + if let Some(active) = servers::load_active() { + commands::grant_server_capability(app.handle(), &active); + } + { + // Hide windows on close instead of destroying them, so reopening + // keeps working (a destroyed webview makes get_webview_window + // return None). For "main" this also lets the dock icon re-show + // it via the RunEvent::Reopen handler below. + use tauri::Manager; + for label in ["main", "prefs"] { + if let Some(win) = app.get_webview_window(label) { + let win_for_event = win.clone(); + win.on_window_event(move |event| { + if let tauri::WindowEvent::CloseRequested { api, .. } = event { + api.prevent_close(); + let _ = win_for_event.hide(); + } + }); + } + } + } + { + // The remote Sure page can emit events but cannot invoke custom + // commands, so SSO is triggered via an event instead of invoke. + use tauri::Listener; + let handle = app.handle().clone(); + app.listen_any("sure://start-sso", move |event| { + #[derive(serde::Deserialize)] + struct StartSso { + server: String, + provider: String, + } + if let Ok(p) = serde_json::from_str::(event.payload()) { + if let Err(e) = commands::begin_sso(&handle, p.server, p.provider) { + eprintln!("[sure] start-sso failed: {e}"); + } + } + }); + } + { + use tauri::Manager; + use tauri_plugin_deep_link::DeepLinkExt; + let handle = app.handle().clone(); + app.deep_link().on_open_url(move |event| { + for url in event.urls() { + let u = url.as_str(); + // SSO handoff first: exchange the one-time code (bound to + // our stored PKCE verifier) for a session in the webview. + // POST it via a form so the verifier never appears in a + // URL / server log (RFC 7636 keeps the verifier secret). + if let Some(cb) = deep_link::parse_sso_callback(u) { + let pending = handle.state::().pending_sso.lock().unwrap().take(); + if let (deep_link::SsoCallback::Code(code), Some(p)) = (cb, pending) { + if let Some(w) = handle.get_webview_window("main") { + let action = format!("{}/sessions/desktop_exchange", p.server); + let js = format!( + "(function(){{var f=document.createElement('form');f.method='POST';f.action={};\ + var c=document.createElement('input');c.type='hidden';c.name='code';c.value={};f.appendChild(c);\ + var v=document.createElement('input');v.type='hidden';v.name='code_verifier';v.value={};f.appendChild(v);\ + document.body.appendChild(f);f.submit();}})();", + serde_json::to_string(&action).unwrap_or_default(), + serde_json::to_string(&code).unwrap_or_default(), + serde_json::to_string(&p.verifier).unwrap_or_default(), + ); + let _ = w.eval(&js); + } + } + continue; + } + // Generic sure://{host}/{path} navigation — only to a + // server the user has saved, so a malicious deep link + // can't load an arbitrary origin into the main webview. + if let Some(target) = deep_link::parse(u) { + if servers::is_known_server(&target.server) { + if let Some(w) = handle.get_webview_window("main") { + let dest = format!("{}{}", target.server, target.path); + let _ = w.eval(&format!("window.location.assign({:?})", dest)); + } + } + } + } + }); + } + Ok(()) + }) + .on_page_load(|window, payload| { + if payload.event() == tauri::webview::PageLoadEvent::Finished { + const BRIDGE: &str = include_str!("../../dist/bridge.js"); + let _ = window.eval(BRIDGE); + } + }) + .build(tauri::generate_context!()) + .expect("error while running Sure Desktop") + .run(|app, event| { + // Clicking the dock icon (while the main window is hidden, not + // destroyed) fires Reopen — re-show and focus the main window. + if let tauri::RunEvent::Reopen { .. } = event { + use tauri::Manager; + if let Some(w) = app.get_webview_window("main") { + let _ = w.show(); + let _ = w.set_focus(); + } + } + }); +} diff --git a/desktop/src-tauri/src/main.rs b/desktop/src-tauri/src/main.rs new file mode 100644 index 000000000..a79e50cec --- /dev/null +++ b/desktop/src-tauri/src/main.rs @@ -0,0 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + sure_desktop_lib::run(); +} diff --git a/desktop/src-tauri/src/menu.rs b/desktop/src-tauri/src/menu.rs new file mode 100644 index 000000000..4eae91873 --- /dev/null +++ b/desktop/src-tauri/src/menu.rs @@ -0,0 +1,90 @@ +use tauri::menu::{AboutMetadata, Menu, MenuItem, PredefinedMenuItem, Submenu}; +use tauri::Manager; + +pub fn build(app: &tauri::AppHandle) -> tauri::Result> { + let pkg = app.package_info().clone(); + + let prefs = MenuItem::with_id(app, "preferences", "Preferences…", true, Some("Cmd+,"))?; + let switch = MenuItem::with_id(app, "switch_server", "Switch Server…", true, Some("Cmd+Shift+O"))?; + let app_menu = Submenu::with_items( + app, + &pkg.name, + true, + &[ + &PredefinedMenuItem::about(app, Some(&pkg.name), Some(AboutMetadata::default()))?, + &PredefinedMenuItem::separator(app)?, + &prefs, + &switch, + &PredefinedMenuItem::separator(app)?, + &PredefinedMenuItem::hide(app, None)?, + &PredefinedMenuItem::hide_others(app, None)?, + &PredefinedMenuItem::separator(app)?, + &PredefinedMenuItem::quit(app, None)?, + ], + )?; + + let file_menu = Submenu::with_items( + app, + "File", + true, + &[&PredefinedMenuItem::close_window(app, None)?], + )?; + + let edit_menu = Submenu::with_items( + app, + "Edit", + true, + &[ + &PredefinedMenuItem::undo(app, None)?, + &PredefinedMenuItem::redo(app, None)?, + &PredefinedMenuItem::separator(app)?, + &PredefinedMenuItem::cut(app, None)?, + &PredefinedMenuItem::copy(app, None)?, + &PredefinedMenuItem::paste(app, None)?, + &PredefinedMenuItem::select_all(app, None)?, + ], + )?; + + let reload = MenuItem::with_id(app, "reload", "Reload", true, Some("Cmd+R"))?; + let view_menu = Submenu::with_items(app, "View", true, &[&reload])?; + + let window_menu = Submenu::with_items( + app, + "Window", + true, + &[ + &PredefinedMenuItem::minimize(app, None)?, + &PredefinedMenuItem::maximize(app, None)?, + ], + )?; + + Menu::with_items(app, &[&app_menu, &file_menu, &edit_menu, &view_menu, &window_menu]) +} + +pub fn on_event(app: &tauri::AppHandle, id: &str) { + match id { + // Handled entirely in Rust: showing the prefs window does not depend on + // the remote page's IPC being available, so it works on any page. + "preferences" | "switch_server" => { + let prefs = app.get_webview_window("prefs"); + if let Some(main) = app.get_webview_window("main") { + let _ = main.eval(&format!( + "console.log('[sure] menu {} -> prefs window present: {}')", + id, + prefs.is_some() + )); + } + if let Some(w) = prefs { + let _ = w.show(); + let _ = w.set_focus(); + let _ = w.unminimize(); + } + } + "reload" => { + if let Some(w) = app.get_webview_window("main") { + let _ = w.eval("window.location.reload()"); + } + } + _ => {} + } +} diff --git a/desktop/src-tauri/src/notifications.rs b/desktop/src-tauri/src/notifications.rs new file mode 100644 index 000000000..227e465ca --- /dev/null +++ b/desktop/src-tauri/src/notifications.rs @@ -0,0 +1,23 @@ +use serde::Deserialize; +use tauri::Listener; +use tauri_plugin_notification::NotificationExt; + +#[derive(Deserialize)] +struct NotifyPayload { + title: String, + body: String, +} + +pub fn register(app: &tauri::AppHandle) { + let handle = app.clone(); + app.listen("bridge://notify", move |event| { + if let Ok(p) = serde_json::from_str::(event.payload()) { + let _ = handle + .notification() + .builder() + .title(p.title) + .body(p.body) + .show(); + } + }); +} diff --git a/desktop/src-tauri/src/servers.rs b/desktop/src-tauri/src/servers.rs new file mode 100644 index 000000000..182d51899 --- /dev/null +++ b/desktop/src-tauri/src/servers.rs @@ -0,0 +1,174 @@ +use serde::{Deserialize, Serialize}; +use url::Url; + +const KEYRING_SERVICE: &str = "app.sure.desktop"; +const KEYRING_ACCOUNT: &str = "servers"; +const KEYRING_ACTIVE: &str = "active_server"; + +#[derive(Debug)] +pub enum ServerError { + InvalidUrl(String), + Keyring(String), +} + +impl std::fmt::Display for ServerError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ServerError::InvalidUrl(m) => write!(f, "Invalid server URL: {m}"), + ServerError::Keyring(m) => write!(f, "Keychain error: {m}"), + } + } +} + +impl Serialize for ServerError { + fn serialize(&self, s: S) -> Result { + s.serialize_str(&self.to_string()) + } +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct ServerEntry { + pub url: String, + pub label: String, +} + +pub fn normalize_server_url(input: &str) -> Result { + let trimmed = input.trim(); + if trimmed.is_empty() { + return Err(ServerError::InvalidUrl("empty".into())); + } + let with_scheme = if trimmed.contains("://") { + trimmed.to_string() + } else { + format!("https://{trimmed}") + }; + let parsed = Url::parse(&with_scheme).map_err(|e| ServerError::InvalidUrl(e.to_string()))?; + let host = parsed.host_str().ok_or_else(|| ServerError::InvalidUrl("missing host".into()))?; + let scheme = parsed.scheme(); + if scheme != "http" && scheme != "https" { + return Err(ServerError::InvalidUrl(format!("unsupported scheme {scheme}"))); + } + let origin = match parsed.port() { + Some(p) => format!("{scheme}://{host}:{p}"), + None => format!("{scheme}://{host}"), + }; + Ok(origin) +} + +pub fn health_check_url(base: &str) -> String { + format!("{}/up", base.trim_end_matches('/')) +} + +pub fn is_healthy_status(status: u16) -> bool { + status == 200 +} + +fn keyring_entry() -> Result { + keyring::Entry::new(KEYRING_SERVICE, KEYRING_ACCOUNT) + .map_err(|e| ServerError::Keyring(e.to_string())) +} + +// On-disk fallback: Keychain items are unreliable for unsigned/dev builds +// (they don't persist across launches without proper code signing), so we also +// mirror the data to the app support directory. Server URLs are not secrets. +fn data_dir() -> Option { + let home = std::env::var_os("HOME")?; + let dir = std::path::Path::new(&home) + .join("Library/Application Support") + .join(KEYRING_SERVICE); + std::fs::create_dir_all(&dir).ok()?; + Some(dir) +} + +fn file_read(name: &str) -> Option { + std::fs::read_to_string(data_dir()?.join(name)).ok() +} + +fn file_write(name: &str, contents: &str) -> Result<(), ServerError> { + let dir = data_dir().ok_or_else(|| ServerError::Keyring("no data dir".into()))?; + // Atomic write: write a temp file in the same dir then rename over the + // destination, so an interrupted write can't leave truncated/invalid JSON. + let tmp = dir.join(format!(".{name}.tmp")); + std::fs::write(&tmp, contents).map_err(|e| ServerError::Keyring(e.to_string()))?; + std::fs::rename(&tmp, dir.join(name)).map_err(|e| ServerError::Keyring(e.to_string())) +} + +pub struct ServerStore; + +impl ServerStore { + pub fn load() -> Vec { + // The on-disk file is the durable source (Keychain is best-effort and + // may not persist on unsigned builds), so read it first and fall back to + // Keychain only when the file is missing/invalid. + if let Some(list) = + file_read("servers.json").and_then(|j| serde_json::from_str::>(&j).ok()) + { + return list; + } + if let Ok(entry) = keyring_entry() { + if let Ok(json) = entry.get_password() { + if let Ok(list) = serde_json::from_str::>(&json) { + return list; + } + } + } + Vec::new() + } + + pub fn save(entries: &[ServerEntry]) -> Result<(), ServerError> { + let json = serde_json::to_string(entries).map_err(|e| ServerError::Keyring(e.to_string()))?; + // Best-effort Keychain; authoritative on-disk write. + if let Ok(entry) = keyring_entry() { + let _ = entry.set_password(&json); + } + file_write("servers.json", &json) + } + + pub fn add(entry: ServerEntry) -> Result, ServerError> { + let mut list = Self::load(); + list.retain(|e| e.url != entry.url); + list.insert(0, entry); + Self::save(&list)?; + Ok(list) + } + + pub fn remove(url: &str) -> Result, ServerError> { + let mut list = Self::load(); + list.retain(|e| e.url != url); + Self::save(&list)?; + Ok(list) + } +} + +/// The last server the user connected to, persisted so the app can resume +/// straight to it on the next launch instead of showing the picker again. +pub fn load_active() -> Option { + if let Some(url) = file_read("active_server").filter(|s| !s.is_empty()) { + return Some(url); + } + if let Ok(entry) = keyring::Entry::new(KEYRING_SERVICE, KEYRING_ACTIVE) { + if let Ok(url) = entry.get_password() { + if !url.is_empty() { + return Some(url); + } + } + } + None +} + +pub fn save_active(url: &str) -> Result<(), ServerError> { + if let Ok(entry) = keyring::Entry::new(KEYRING_SERVICE, KEYRING_ACTIVE) { + let _ = entry.set_password(url); + } + file_write("active_server", url) +} + +/// True if `url` normalizes to a server the user has saved (or the active one). +/// Gates deep-link navigation and SSO so only trusted origins can drive them. +pub fn is_known_server(url: &str) -> bool { + let Ok(canonical) = normalize_server_url(url) else { + return false; + }; + ServerStore::load().iter().any(|e| e.url == canonical) + || load_active().as_deref() == Some(canonical.as_str()) +} diff --git a/desktop/src-tauri/src/sso.rs b/desktop/src-tauri/src/sso.rs new file mode 100644 index 000000000..fd7ae82c9 --- /dev/null +++ b/desktop/src-tauri/src/sso.rs @@ -0,0 +1,20 @@ +use base64::Engine; +use sha2::{Digest, Sha256}; + +/// A PKCE (S256) pair. The verifier stays in the desktop app across the browser +/// round-trip; only the challenge is sent to the server (and on to the IdP), and +/// only the verifier can redeem the one-time code returned via sure://sso/callback. +pub struct Pkce { + pub verifier: String, + pub challenge: String, +} + +pub fn generate_pkce() -> Pkce { + let mut bytes = [0u8; 32]; + getrandom::getrandom(&mut bytes).expect("secure RNG unavailable"); + // Hex verifier: 64 chars, all within the RFC 7636 unreserved set. + let verifier: String = bytes.iter().map(|b| format!("{:02x}", b)).collect(); + let digest = Sha256::digest(verifier.as_bytes()); + let challenge = base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(digest); + Pkce { verifier, challenge } +} diff --git a/desktop/src-tauri/src/state.rs b/desktop/src-tauri/src/state.rs new file mode 100644 index 000000000..a1746205c --- /dev/null +++ b/desktop/src-tauri/src/state.rs @@ -0,0 +1,18 @@ +use std::collections::HashSet; +use std::sync::Mutex; + +/// A desktop-SSO flow in progress: the PKCE verifier and the server it targets, +/// held until the sure://sso/callback deep link arrives. +pub struct PendingSso { + pub verifier: String, + pub server: String, +} + +#[derive(Default)] +pub struct AppState { + pub active_server: Mutex>, + pub pending_sso: Mutex>, + /// Server origins we've already granted a runtime IPC capability to, so we + /// don't add a duplicate capability for the same origin. + pub granted_origins: Mutex>, +} diff --git a/desktop/src-tauri/src/window.rs b/desktop/src-tauri/src/window.rs new file mode 100644 index 000000000..98d4b0c23 --- /dev/null +++ b/desktop/src-tauri/src/window.rs @@ -0,0 +1,16 @@ +use tauri::Manager; +use tauri_plugin_decorum::WebviewWindowExt; + +pub fn setup(app: &tauri::App) -> Result<(), Box> { + let window = app.get_webview_window("main").expect("main window exists"); + + // The window is opaque (the app paints its own solid backgrounds), so we + // skip the transparent-window vibrancy blur — it never showed through and + // forced the compositor to re-blend the webview every frame (high GPU). + + // Overlay titlebar + inset traffic lights so content sits under a clean bar. + window.create_overlay_titlebar()?; + window.set_traffic_lights_inset(16.0, 20.0)?; + + Ok(()) +} diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json new file mode 100644 index 000000000..eb8cb8907 --- /dev/null +++ b/desktop/src-tauri/tauri.conf.json @@ -0,0 +1,54 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "Sure", + "version": "0.1.0", + "identifier": "app.sure.desktop", + "build": { + "beforeDevCommand": "npm run dev", + "devUrl": "http://localhost:1420", + "beforeBuildCommand": "npm run build", + "frontendDist": "../dist" + }, + "app": { + "macOSPrivateApi": true, + "withGlobalTauri": true, + "windows": [ + { + "label": "main", + "title": "Sure", + "width": 1200, + "height": 800, + "minWidth": 900, + "minHeight": 600, + "transparent": false, + "titleBarStyle": "Overlay", + "hiddenTitle": true + }, + { + "label": "prefs", + "title": "Preferences", + "width": 420, + "height": 520, + "visible": false, + "transparent": false, + "titleBarStyle": "Overlay", + "hiddenTitle": true, + "url": "prefs.html" + } + ], + "security": { + "csp": "default-src 'self'; base-uri 'self'; object-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' asset: http://asset.localhost data:; connect-src 'self' ipc: http://ipc.localhost" + } + }, + "bundle": { + "active": true, + "targets": ["app", "dmg"], + "icon": ["icons/icon.icns"], + "category": "public.app-category.finance" + }, + "plugins": { + "deep-link": { + "desktop": { "schemes": ["sure"] } + } + } +} diff --git a/desktop/src-tauri/tests/config_test.rs b/desktop/src-tauri/tests/config_test.rs new file mode 100644 index 000000000..0456b6927 --- /dev/null +++ b/desktop/src-tauri/tests/config_test.rs @@ -0,0 +1,19 @@ +use serde_json::Value; + +#[test] +fn local_webview_csp_is_enabled_and_restrictive() { + let config: Value = serde_json::from_str(include_str!("../tauri.conf.json")).unwrap(); + let csp = config["app"]["security"]["csp"].as_str().expect("CSP must be a string"); + + for directive in [ + "default-src 'self'", + "base-uri 'self'", + "object-src 'none'", + "script-src 'self'", + "style-src 'self' 'unsafe-inline'", + "connect-src 'self' ipc: http://ipc.localhost", + ] { + assert!(csp.contains(directive), "CSP is missing {directive:?}"); + } + assert!(!csp.contains("connect-src *")); +} diff --git a/desktop/src-tauri/tests/deep_link_test.rs b/desktop/src-tauri/tests/deep_link_test.rs new file mode 100644 index 000000000..5f3ed7aad --- /dev/null +++ b/desktop/src-tauri/tests/deep_link_test.rs @@ -0,0 +1,44 @@ +use sure_desktop_lib::deep_link::{parse, parse_sso_callback, SsoCallback}; + +#[test] +fn parses_server_and_path() { + let t = parse("sure://app.example.com/accounts/123").unwrap(); + assert_eq!(t.server, "https://app.example.com"); + assert_eq!(t.path, "/accounts/123"); +} + +#[test] +fn parses_with_port_and_defaults_root_path() { + let t = parse("sure://localhost:3000").unwrap(); + assert_eq!(t.server, "https://localhost:3000"); + assert_eq!(t.path, "/"); +} + +#[test] +fn rejects_other_schemes() { + assert!(parse("https://app.example.com/x").is_none()); + assert!(parse("sureapp://oauth/callback").is_none()); +} + +#[test] +fn parses_sso_callback_code() { + match parse_sso_callback("sure://sso/callback?code=abc123") { + Some(SsoCallback::Code(c)) => assert_eq!(c, "abc123"), + _ => panic!("expected code"), + } +} + +#[test] +fn parses_sso_callback_error() { + match parse_sso_callback("sure://sso/callback?error=account_not_linked") { + Some(SsoCallback::Error(e)) => assert_eq!(e, "account_not_linked"), + _ => panic!("expected error"), + } +} + +#[test] +fn sso_callback_rejects_non_sso_and_other_schemes() { + assert!(parse_sso_callback("sure://app.example.com/accounts").is_none()); + assert!(parse_sso_callback("sureapp://sso/callback?code=x").is_none()); + assert!(parse_sso_callback("sure://sso/callback").is_none()); +} diff --git a/desktop/src-tauri/tests/servers_test.rs b/desktop/src-tauri/tests/servers_test.rs new file mode 100644 index 000000000..87abea0bc --- /dev/null +++ b/desktop/src-tauri/tests/servers_test.rs @@ -0,0 +1,33 @@ +use sure_desktop_lib::servers::{normalize_server_url, health_check_url, is_healthy_status}; + +#[test] +fn normalizes_bare_host_to_https_origin() { + assert_eq!(normalize_server_url("app.example.com").unwrap(), "https://app.example.com"); +} + +#[test] +fn preserves_explicit_http_scheme_and_port() { + assert_eq!(normalize_server_url("http://localhost:3000/").unwrap(), "http://localhost:3000"); +} + +#[test] +fn strips_path_and_trailing_slash() { + assert_eq!(normalize_server_url("https://s.example.com/session/new").unwrap(), "https://s.example.com"); +} + +#[test] +fn rejects_empty_input() { + assert!(normalize_server_url(" ").is_err()); +} + +#[test] +fn builds_health_url() { + assert_eq!(health_check_url("https://s.example.com"), "https://s.example.com/up"); +} + +#[test] +fn only_200_is_healthy() { + assert!(is_healthy_status(200)); + assert!(!is_healthy_status(302)); + assert!(!is_healthy_status(500)); +} diff --git a/desktop/src/assets/logomark.svg b/desktop/src/assets/logomark.svg new file mode 100644 index 000000000..80e043546 --- /dev/null +++ b/desktop/src/assets/logomark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/desktop/src/bridge.ts b/desktop/src/bridge.ts new file mode 100644 index 000000000..2352b8e48 --- /dev/null +++ b/desktop/src/bridge.ts @@ -0,0 +1,136 @@ +// Injected into every page loaded in the main window (local onboarding + the +// remote Sure site). Adds native-titlebar chrome, drags the window, forwards +// notifications/badge to Rust, intercepts SSO into the system browser, and +// navigates on server switches. +(() => { + const tauri = (window as any).__TAURI__; + + // Diagnostics — visible in DevTools console. On the remote Sure page, IPC only + // works if withGlobalTauri is set AND a capability's remote.urls matches. + // eslint-disable-next-line no-console + console.log("[sure] bridge loaded", { + href: location.href, + hasTauri: !!tauri, + hasEvent: !!tauri?.event, + hasCore: !!tauri?.core, + hasWindow: !!tauri?.window, + }); + + // Native titlebar chrome — offset the left icon rail so its logo clears the + // traffic lights, and make the top ~34px band drag the window. Using a + // document-level mousedown (rather than a fixed overlay strip) means dragging + // works on every page regardless of Sure's own sticky headers, while its + // interactive controls in that band stay clickable. Main content is not + // pushed down. + if (!(window as any).__sureChrome) { + (window as any).__sureChrome = true; + const style = document.createElement("style"); + style.textContent = 'nav[class~="w-[84px]"]{padding-top:44px !important;box-sizing:border-box}'; + (document.head || document.documentElement).appendChild(style); + + const DRAG_H = 34; + document.addEventListener( + "mousedown", + (ev) => { + if (ev.button !== 0 || ev.clientY > DRAG_H) return; + const el = ev.target as Element | null; + if ( + el && + el.closest("a,button,input,select,textarea,label,[role='button'],[contenteditable],[data-no-drag]") + ) { + return; // let Sure's own controls in the titlebar band work + } + try { + tauri?.window?.getCurrentWindow?.().startDragging?.(); + } catch { + /* IPC unavailable on this page */ + } + }, + true + ); + } + + if (!tauri?.event) { + // eslint-disable-next-line no-console + console.warn("[sure] Tauri IPC unavailable on this page — notifications, SSO, and drag-by-API disabled"); + return; + } + const emit = tauri.event.emit as (e: string, p: unknown) => void; + + // SSO must run in the system browser (passkeys/WebAuthn don't work in an + // embedded webview). Each provider is a form POSTing to /auth/{provider}; + // intercept and hand off to Rust, which opens the browser. Password login + // (POST /sessions) is untouched. + if (!(window as any).__sureSsoHook) { + (window as any).__sureSsoHook = true; + document.addEventListener( + "submit", + (ev) => { + const form = ev.target as HTMLFormElement | null; + if (!form || form.tagName !== "FORM") return; + let path: string; + try { + path = new URL(form.action, location.href).pathname; + } catch { + return; + } + const m = path.match(/^\/auth\/([A-Za-z0-9_-]+)$/); + if (!m) return; // not an SSO provider form (e.g. /sessions, /auth/x/callback) + ev.preventDefault(); + ev.stopImmediatePropagation(); + // Emit an event (remote pages can emit but not invoke custom commands); + // Rust listens for "sure://start-sso" and opens the browser. + // eslint-disable-next-line no-console + console.log("[sure] SSO intercept -> emit sure://start-sso", m[1]); + Promise.resolve(emit("sure://start-sso", { server: location.origin, provider: m[1] })) + // eslint-disable-next-line no-console + .then(() => console.log("[sure] start-sso emitted")) + // eslint-disable-next-line no-console + .catch((e: unknown) => console.error("[sure] start-sso emit failed", e)); + }, + true // capture, to beat any page handlers + ); + } + + // Navigate the main window when the active server changes (e.g. switching + // servers from the Preferences window while logged in). + if (!(window as any).__sureNavListener) { + (window as any).__sureNavListener = true; + tauri.event.listen("active-server-changed", (e: any) => { + const w = window as any; + if (w.__sureNav) return; + w.__sureNav = e.payload; + window.location.assign(`${e.payload}/`); + }); + } + + // Sync-complete + alert toasts: Sure renders flash/notification nodes. + const seen = new WeakSet(); + const scan = () => { + document.querySelectorAll("[data-notification], .flash, [role='alert']").forEach((node) => { + if (seen.has(node)) return; + seen.add(node); + const text = (node.textContent || "").trim(); + if (!text) return; + emit("bridge://notify", { title: "Sure", body: text.slice(0, 180) }); + }); + // Dock badge: any element the page exposes with data-attention-count. + const badgeEl = document.querySelector("[data-attention-count]"); + const count = badgeEl ? Number(badgeEl.getAttribute("data-attention-count")) : 0; + emit("bridge://badge", { count: Number.isFinite(count) ? count : 0 }); + }; + + // Coalesce bursts of DOM mutations into one scan per frame rather than + // re-querying the whole document on every mutation. + let scheduled = false; + const obs = new MutationObserver(() => { + if (scheduled) return; + scheduled = true; + requestAnimationFrame(() => { + scheduled = false; + scan(); + }); + }); + obs.observe(document.documentElement, { childList: true, subtree: true }); + scan(); +})(); diff --git a/desktop/src/main.ts b/desktop/src/main.ts new file mode 100644 index 000000000..c942dad96 --- /dev/null +++ b/desktop/src/main.ts @@ -0,0 +1,113 @@ +import { invoke } from "@tauri-apps/api/core"; +import { listen } from "@tauri-apps/api/event"; +import { S } from "./strings"; +import { serverErrorMessage } from "./status"; + +interface ServerEntry { url: string; label: string; } + +const $ = (id: string) => document.getElementById(id) as T; + +// Navigate to a server's login page exactly once. connect() and the +// active-server-changed listener(s) can all request navigation for the same +// server; without this guard they fire multiple concurrent GET /sessions/new +// requests, each minting a new session + CSRF token, which race and cause +// "Can't verify CSRF token authenticity" on the POST. +function goToServer(url: string) { + const w = window as unknown as { __sureNav?: string }; + if (w.__sureNav) return; + w.__sureNav = url; + // Navigate to the server root: Rails serves the dashboard if the session + // cookie is still valid, or redirects to the login page if not — so a + // relaunch with a live session resumes without re-logging in. + window.location.assign(`${url}/`); +} + +function fill() { + ($("logo") as HTMLImageElement).src = new URL("./assets/logomark.svg", import.meta.url).href; + $("title").textContent = S.title; + $("url-label").textContent = S.serverLabel; + ($("server-url") as HTMLInputElement).placeholder = S.urlPlaceholder; + $("connect").textContent = S.connect; + $("remembered-title").textContent = S.remembered; +} + +function setStatus(msg: string, kind: "info" | "error" = "info") { + const el = $("status"); + el.textContent = msg; + el.dataset.kind = kind; +} + +async function connect(rawUrl: string) { + setStatus(S.checking, "info"); + let healthy: boolean; + try { + healthy = await invoke("check_server", { url: rawUrl }); + } catch (e) { + setStatus(serverErrorMessage(e), "error"); + return; + } + if (!healthy) { setStatus(S.unreachable, "error"); return; } + try { + const list = await invoke("add_server", { url: rawUrl, label: "" }); + const canonical = list.find((s) => s.url === rawUrl)?.url ?? list[0].url; + await invoke("set_active_server", { url: canonical }); + goToServer(canonical); + } catch (e) { + setStatus(serverErrorMessage(e), "error"); + } +} + +async function renderRemembered() { + const servers = await invoke("list_servers"); + const section = $("remembered"); + const listEl = $("server-list"); + listEl.innerHTML = ""; + if (servers.length === 0) { section.classList.add("hidden"); return; } + section.classList.remove("hidden"); + for (const s of servers) { + const li = document.createElement("li"); + const open = document.createElement("button"); + open.className = "server-open"; + open.textContent = s.label; + open.addEventListener("click", () => connect(s.url)); + const rm = document.createElement("button"); + rm.className = "server-remove"; + rm.textContent = S.remove; + rm.addEventListener("click", async (e) => { + e.stopPropagation(); + await invoke("remove_server", { url: s.url }); + renderRemembered(); + }); + li.append(open, rm); + listEl.append(li); + } +} + +$("server-form").addEventListener("submit", (e) => { + e.preventDefault(); + const url = ($("server-url") as HTMLInputElement).value.trim(); + if (url) connect(url); +}); + +// On launch, resume straight to the last server if there is one; otherwise +// show the picker. +async function boot() { + let active: string | null = null; + try { + active = await invoke("active_server"); + } catch (e) { + // Don't let a failed read abort startup and leave a blank onboarding window. + // eslint-disable-next-line no-console + console.error("[sure] failed to read active server", e); + } + if (active) { + goToServer(active); + return; + } + fill(); + renderRemembered(); +} +boot(); + +// Navigate when the active server changes (e.g. picked from Preferences). +listen("active-server-changed", (e) => goToServer(e.payload)); diff --git a/desktop/src/prefs.ts b/desktop/src/prefs.ts new file mode 100644 index 000000000..432708c90 --- /dev/null +++ b/desktop/src/prefs.ts @@ -0,0 +1,70 @@ +import { invoke } from "@tauri-apps/api/core"; +import { getCurrentWindow } from "@tauri-apps/api/window"; +import { P, S } from "./strings"; +import { serverErrorMessage } from "./status"; + +interface ServerEntry { url: string; label: string; } +const $ = (id: string) => document.getElementById(id) as T; + +$("prefs-title").textContent = P.title; +$("servers-title").textContent = P.servers; +$("prefs-add-btn").textContent = P.add; +$("autostart-label").textContent = P.launchAtLogin; +($("prefs-url") as HTMLInputElement).placeholder = S.urlPlaceholder; + +async function renderServers() { + const servers = await invoke("list_servers"); + const list = $("prefs-server-list"); + list.innerHTML = ""; + for (const s of servers) { + const li = document.createElement("li"); + const open = document.createElement("button"); + open.className = "server-open"; + open.textContent = s.label; + open.addEventListener("click", async () => { + try { + await invoke("set_active_server", { url: s.url }); + await getCurrentWindow().hide(); + } catch (err) { + $("prefs-status").textContent = serverErrorMessage(err); + } + }); + const rm = document.createElement("button"); + rm.className = "server-remove"; + rm.textContent = S.remove; + rm.addEventListener("click", async (e) => { + e.stopPropagation(); + try { + await invoke("remove_server", { url: s.url }); + renderServers(); + } catch (err) { + $("prefs-status").textContent = serverErrorMessage(err); + } + }); + li.append(open, rm); + list.append(li); + } +} + +$("prefs-add").addEventListener("submit", async (e) => { + e.preventDefault(); + const url = ($("prefs-url") as HTMLInputElement).value.trim(); + if (!url) return; + $("prefs-status").textContent = S.checking; + try { + const ok = await invoke("check_server", { url }); + if (!ok) { $("prefs-status").textContent = S.unreachable; return; } + await invoke("add_server", { url, label: "" }); + ($("prefs-url") as HTMLInputElement).value = ""; + $("prefs-status").textContent = ""; + renderServers(); + } catch (err) { + $("prefs-status").textContent = serverErrorMessage(err); + } +}); + +const autostart = $("autostart") as HTMLInputElement; +invoke("get_launch_at_login").then((v) => (autostart.checked = v)); +autostart.addEventListener("change", () => invoke("set_launch_at_login", { enabled: autostart.checked })); + +renderServers(); diff --git a/desktop/src/status.ts b/desktop/src/status.ts new file mode 100644 index 000000000..866779df5 --- /dev/null +++ b/desktop/src/status.ts @@ -0,0 +1,8 @@ +import { S } from "./strings"; + +// Shared mapping of a check_server / server-command failure to a user-facing +// status. check_server raises ServerError::InvalidUrl (Display "Invalid server +// URL: …") for malformed URLs; everything else is treated as unreachable. +export function serverErrorMessage(e: unknown): string { + return String(e).includes("Invalid") ? S.invalidUrl : S.unreachable; +} diff --git a/desktop/src/strings.ts b/desktop/src/strings.ts new file mode 100644 index 000000000..a56839a42 --- /dev/null +++ b/desktop/src/strings.ts @@ -0,0 +1,19 @@ +export const S = { + title: "Connect to your Sure server", + serverLabel: "Server address", + urlPlaceholder: "https://sure.example.com", + connect: "Continue", + checking: "Checking server…", + unreachable: "Couldn't reach a Sure server at that address.", + invalidUrl: "That doesn't look like a valid address.", + remembered: "Remembered servers", + remove: "Remove", +} as const; + +export const P = { + title: "Preferences", + servers: "Servers", + add: "Add", + launchAtLogin: "Launch Sure at login", + switchTo: "Switch to", +} as const; diff --git a/desktop/src/styles.css b/desktop/src/styles.css new file mode 100644 index 000000000..d578896c5 --- /dev/null +++ b/desktop/src/styles.css @@ -0,0 +1,181 @@ +/* Onboarding chrome styled to match Sure's real auth page (design-system tokens). */ +:root { + --titlebar-h: 38px; + font-family: -apple-system, system-ui, "Segoe UI", sans-serif; + color-scheme: light dark; + + /* Sure light palette */ + --bg: var(--color-surface); + --container: var(--color-container); + --text: var(--color-black); + --secondary: var(--color-gray-500); + --subdued: var(--color-gray-400); + --border: var(--color-tertiary); + --focus-ring: var(--color-focus-ring); + --btn-bg: var(--color-gray-800); + --btn-fg: var(--color-white); + --error: var(--color-destructive); +} + +@media (prefers-color-scheme: dark) { + :root { + --bg: var(--color-surface); + --container: var(--color-container); + --text: var(--color-gray-100); + --secondary: var(--color-gray-400); + --subdued: var(--color-gray-500); + --border: var(--color-alpha-white-200); + --focus-ring: var(--color-focus-ring); + --btn-bg: var(--color-white); + --btn-fg: var(--color-black); + --error: var(--color-destructive); + } +} + +* { box-sizing: border-box; } +html, body { margin: 0; height: 100%; } +body { background: var(--bg); color: var(--text); } + +/* Draggable titlebar strip (clears the traffic lights). */ +.titlebar { + position: fixed; + top: 0; + left: 0; + right: 0; + height: var(--titlebar-h); + z-index: 1000; + -webkit-app-region: drag; +} + +.onboarding { + min-height: 100vh; + display: grid; + place-items: center; + padding: calc(var(--titlebar-h) + 8px) 24px 32px; + -webkit-app-region: drag; +} + +.auth { + width: 100%; + max-width: 340px; + display: flex; + flex-direction: column; + gap: 16px; +} + +.logo { width: 56px; height: auto; margin: 0 auto; display: block; } + +.auth-title { + margin: -4px 0 4px; + font-size: 15px; + font-weight: 500; + color: var(--secondary); + text-align: center; +} + +.auth-form { display: flex; flex-direction: column; gap: 12px; } + +/* Mirrors .form-field from Sure's design system. */ +.form-field { + display: flex; + flex-direction: column; + gap: 4px; + padding: 8px 12px; + border-radius: 8px; + border: 1px solid var(--border); + background: var(--container); + text-align: left; + transition: box-shadow 0.2s ease, border-color 0.2s ease; + -webkit-app-region: no-drag; +} +.form-field:focus-within { box-shadow: 0 0 0 4px var(--focus-ring); } +.form-field__label { font-size: 12px; color: var(--secondary); } +.form-field__input { + width: 100%; + padding: 0; + border: none; + outline: none; + background: transparent; + color: var(--text); + font-size: 14px; +} +.form-field__input::placeholder { color: var(--subdued); } + +.btn-primary { + -webkit-app-region: no-drag; + width: 100%; + padding: 12px; + border: none; + border-radius: 10px; + background: var(--btn-bg); + color: var(--btn-fg); + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: opacity 0.2s ease; +} +.btn-primary:hover { opacity: 0.9; } + +.status { + min-height: 16px; + margin: 0; + font-size: 13px; + text-align: center; + color: var(--secondary); +} +.status[data-kind="error"] { color: var(--error); } + +.remembered { -webkit-app-region: no-drag; } +.remembered-title { + margin: 4px 0 8px; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--secondary); +} +#server-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; } +#server-list li { display: flex; gap: 8px; align-items: center; } +.server-open { + flex: 1; + text-align: left; + padding: 8px 12px; + border: 1px solid var(--border); + border-radius: 8px; + background: var(--container); + color: var(--text); + font-size: 13px; + cursor: pointer; +} +.server-open:hover { border-color: var(--secondary); } +.server-remove { background: transparent; border: none; color: var(--secondary); font-size: 12px; cursor: pointer; } + +.hidden { display: none; } + +/* Preferences window — same palette. */ +.prefs { + min-height: 100vh; + box-sizing: border-box; + padding: calc(var(--titlebar-h) + 8px) 24px 24px; + background: var(--bg); + color: var(--text); +} +.prefs h1 { font-size: 16px; margin: 0 0 16px; } +.prefs section { margin-bottom: 20px; } +.prefs h2 { + margin: 0 0 8px; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--secondary); +} +#prefs-server-list { list-style: none; margin: 0 0 12px; padding: 0; display: flex; flex-direction: column; gap: 6px; } +#prefs-server-list li { display: flex; gap: 8px; align-items: center; } +#prefs-add { display: flex; gap: 8px; margin: 0 0 8px; align-items: stretch; } +#prefs-add .form-field { flex: 1; } +#prefs-add .btn-primary { width: auto; padding: 8px 16px; } +.prefs .status { text-align: left; } +.prefs .row { display: flex; align-items: center; justify-content: space-between; } +.prefs .row label { font-size: 13px; } + +/* Interactive elements never part of the drag region. */ +input, button, select, a, #server-list, #prefs-server-list { -webkit-app-region: no-drag; } diff --git a/desktop/tsconfig.json b/desktop/tsconfig.json new file mode 100644 index 000000000..b6e82731b --- /dev/null +++ b/desktop/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ES2021", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "noUnusedLocals": true, + "skipLibCheck": true, + "lib": ["ES2021", "DOM", "DOM.Iterable"] + }, + "include": ["src"] +} diff --git a/desktop/vite.config.ts b/desktop/vite.config.ts new file mode 100644 index 000000000..9ad06bf09 --- /dev/null +++ b/desktop/vite.config.ts @@ -0,0 +1,28 @@ +import { defineConfig } from "vite"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +// package.json sets "type": "module", so this config loads as ESM where +// __dirname is undefined; derive it from import.meta.url instead. +const rootDir = dirname(fileURLToPath(import.meta.url)); + +export default defineConfig({ + clearScreen: false, + server: { port: 1420, strictPort: true }, + build: { + target: "safari15", + outDir: "dist", + emptyOutDir: true, + rollupOptions: { + input: { + main: resolve(rootDir, "index.html"), + prefs: resolve(rootDir, "prefs.html"), + bridge: resolve(rootDir, "src/bridge.ts"), + }, + output: { + entryFileNames: (chunk) => (chunk.name === "bridge" ? "bridge.js" : "assets/[name]-[hash].js"), + format: "es", + }, + }, + }, +}); diff --git a/test/controllers/sessions_controller_test.rb b/test/controllers/sessions_controller_test.rb index e2a201974..712343de1 100644 --- a/test/controllers/sessions_controller_test.rb +++ b/test/controllers/sessions_controller_test.rb @@ -679,4 +679,75 @@ class SessionsControllerTest < ActionDispatch::IntegrationTest follow_redirect! assert_response :success end + + # ── Desktop SSO: browser handoff + PKCE code exchange ── + + test "desktop SSO exchanges a PKCE-bound code for a web session and is single-use" do + original_cache = Rails.cache + Rails.cache = ActiveSupport::Cache::MemoryStore.new + + verifier = SecureRandom.hex(32) + challenge = Base64.urlsafe_encode64(Digest::SHA256.digest(verifier), padding: false) + oidc_identity = oidc_identities(:bob_google) + + Rails.configuration.x.auth.stubs(:sso_providers).returns([ + { name: "openid_connect", strategy: "openid_connect", label: "Google" } + ]) + setup_omniauth_mock(provider: oidc_identity.provider, uid: oidc_identity.uid, email: @user.email, name: "Bob Dylan") + + get "/auth/desktop/openid_connect", params: { code_challenge: challenge } + assert_response :success + + get "/auth/openid_connect/callback" + assert_response :redirect + redirect_url = @response.redirect_url + assert redirect_url.start_with?("sure://sso/callback?code="), "Expected sure://sso/callback but got #{redirect_url}" + code = Rack::Utils.parse_query(URI.parse(redirect_url).query)["code"] + assert code.present? + + assert_difference -> { oidc_identity.user.sessions.count }, 1 do + post desktop_sso_exchange_path, params: { code: code, code_verifier: verifier } + end + assert_redirected_to root_path + + # Single-use: the same code cannot be redeemed again. + assert_no_difference -> { oidc_identity.user.sessions.count } do + post desktop_sso_exchange_path, params: { code: code, code_verifier: verifier } + end + assert_redirected_to new_session_path + ensure + Rails.cache = original_cache + end + + test "desktop SSO exchange rejects a wrong PKCE verifier" do + original_cache = Rails.cache + Rails.cache = ActiveSupport::Cache::MemoryStore.new + + challenge = Base64.urlsafe_encode64(Digest::SHA256.digest("the-real-verifier"), padding: false) + oidc_identity = oidc_identities(:bob_google) + + Rails.configuration.x.auth.stubs(:sso_providers).returns([ + { name: "openid_connect", strategy: "openid_connect", label: "Google" } + ]) + setup_omniauth_mock(provider: oidc_identity.provider, uid: oidc_identity.uid, email: @user.email, name: "Bob Dylan") + + get "/auth/desktop/openid_connect", params: { code_challenge: challenge } + get "/auth/openid_connect/callback" + code = Rack::Utils.parse_query(URI.parse(@response.redirect_url).query)["code"] + + assert_no_difference -> { oidc_identity.user.sessions.count } do + post desktop_sso_exchange_path, params: { code: code, code_verifier: "an-attacker-guess" } + end + assert_redirected_to new_session_path + ensure + Rails.cache = original_cache + end + + test "desktop_sso_start rejects a missing PKCE code_challenge" do + Rails.configuration.x.auth.stubs(:sso_providers).returns([ + { name: "openid_connect", strategy: "openid_connect", label: "Google" } + ]) + get "/auth/desktop/openid_connect" + assert_redirected_to new_session_path + end end