mirror of
https://github.com/J3vb/OwnCord.git
synced 2026-09-03 03:50:00 +03:00
* ci(deps): bump anthropics/claude-code-action (#1404) Bumps the actions-dependencies group with 1 update: [anthropics/claude-code-action](https://github.com/anthropics/claude-code-action). Updates `anthropics/claude-code-action` from 1.0.193 to 1.0.199 - [Release notes](https://github.com/anthropics/claude-code-action/releases) - [Commits](https://github.com/anthropics/claude-code-action/compare/9d7150bc8a3dae8149739a88019d192b579ad90c...dcb57747bfceeaa1fa72638cae52295d1d853d4a) --- updated-dependencies: - dependency-name: anthropics/claude-code-action dependency-version: 1.0.199 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions-dependencies ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): pin rfd to tauri-plugin-dialog's major to unblock the cargo group (#1406) The cargo-dependencies group PR (#1405) fails Rust Unit Tests on Linux: error: failed to run custom build command for `rfd v0.17.2` You need to choose at least one backend: `gtk3` or `xdg-portal` features for x86_64-linux rfd is not really ours. It arrives in the tree via tauri-plugin-dialog, which pins ^0.16; we declare it directly only for the fatal-startup message box in lib.rs, where the Tauri app never finished building and the plugin has no AppHandle to run a dialog through. Cargo unifies features only within a semver-compatible version group, so while both wanted ^0.16 there was a single rfd in the graph and the plugin's backend features covered our `default-features = false` declaration too. Bumping our direct dep to 0.17 forks rfd into two crates: the plugin keeps 0.16.0 with its features, ours resolves to 0.17.2 with none, and rfd 0.17 added a build.rs assertion that aborts the Linux build when no backend feature is set. Confirmed in the PR's lockfile, which carries both 0.16.0 and 0.17.2. Adding a Linux backend feature would be the wrong fix: it would paper over the fork and still build rfd twice on every platform for one error dialog. Our version has to track the plugin's instead, so ignore semver-minor rfd updates (0.16 -> 0.17 for a 0.x crate) until tauri-plugin-dialog moves. Patch updates inside 0.16.x still flow. The remaining five crates in the group are unaffected; `windows` in fact consolidates 3 versions down to 2. Cargo.toml is comment-only here - no dependency, feature, or lockfile change - so the build is untouched. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * chore(deps): bump log (#1407) Bumps the cargo-dependencies group with 1 update in the /Client/tauri-client/src-tauri directory: [log](https://github.com/rust-lang/log). Updates `log` from 0.4.33 to 0.4.34 - [Release notes](https://github.com/rust-lang/log/releases) - [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/log/compare/0.4.33...0.4.34) --- updated-dependencies: - dependency-name: log dependency-version: 0.4.34 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo-dependencies ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci(deps): bump anthropics/claude-code-action (#1408) Bumps the actions-dependencies group with 1 update: [anthropics/claude-code-action](https://github.com/anthropics/claude-code-action). Updates `anthropics/claude-code-action` from 1.0.199 to 1.0.200 - [Release notes](https://github.com/anthropics/claude-code-action/releases) - [Commits](https://github.com/anthropics/claude-code-action/compare/dcb57747bfceeaa1fa72638cae52295d1d853d4a...24dcd50c0568f0fc9e9211213a4fd2d9eb15c4e0) --- updated-dependencies: - dependency-name: anthropics/claude-code-action dependency-version: 1.0.200 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions-dependencies ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(client): strip tags to a fixpoint inside sanitizePassApprox CodeQL alert 17 (js/incomplete-multi-character-sanitization, high) fires on the single-pass `input.replace(/<[^>]*>/g, "")`: a lone replace can in principle splice a fresh `<...>` out of the text either side of what it removed. echoNormalize already loops sanitizePassApprox to a fixpoint, so that was absorbed one level up and the output is unchanged -- but the repetition is now where a reader (and the query) can see it. sanitizePassApprox is a comparison normalizer, never rendered output: its only consumer is the `===` echo match in isUnreconciledEcho. Not a sanitization boundary, so this is a legibility fix, not a security one. Client suite 5257/5257, tsc, lint, hygiene all green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(client): put the strip-tags replace inside the loop body The previous form hoisted the `replace` into the `for` header's init expression, so CodeQL still reported it (alert 18, line 217 col 21) -- js/incomplete-multi-character-sanitization only credits a repeated replacement when the call sits in the loop *body*, which is also the shape the rule's own guidance shows. Same fixpoint, same output; `while (out.includes("<"))` gives the loop a real condition instead of `for (;;)`. Client suite 5257/5257, tsc, lint, prettier green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
135 lines
6.5 KiB
TOML
135 lines
6.5 KiB
TOML
[package]
|
|
name = "owncord-client"
|
|
version = "1.2.0-alpha.4"
|
|
edition = "2021"
|
|
# Effective minimum: tauri 2.11 declares rust-version = "1.77.2", so the crate
|
|
# cannot build below it. Declaring it here enables Cargo's MSRV-aware resolver
|
|
# warning instead of silently following whatever toolchain is installed.
|
|
rust-version = "1.77.2"
|
|
description = "OwnCord Desktop Client"
|
|
|
|
# Crate-level lint policy so hardening ships with every build, not only the CI
|
|
# `cargo clippy -- -D warnings` gate (which downstream/local builds don't run).
|
|
# Enables the allow-by-default rustc lints governing the Win32 FFI unsafe path.
|
|
[lints.rust]
|
|
unsafe_op_in_unsafe_fn = "deny"
|
|
unused_unsafe = "warn"
|
|
|
|
[lib]
|
|
name = "owncord_client_lib"
|
|
crate-type = ["lib", "cdylib", "staticlib"]
|
|
|
|
[build-dependencies]
|
|
tauri-build = { version = "2", features = [] }
|
|
|
|
[features]
|
|
default = []
|
|
devtools = ["tauri/devtools"]
|
|
|
|
[dependencies]
|
|
tauri = { version = "2", features = ["tray-icon"] }
|
|
tauri-plugin-store = "2"
|
|
tauri-plugin-notification = "2"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
# Self-signed server certificates are handled by the Rust TOFU proxies
|
|
# (ws_proxy, livekit_proxy, http_proxy), NOT by the plugin's dangerous-settings
|
|
# feature — REST traffic is tunneled through http_proxy which pins the cert to
|
|
# the trust-on-first-use fingerprint. The plugin therefore does default TLS
|
|
# validation (used only for external hosts: image CDNs, OG previews, YouTube).
|
|
tauri-plugin-http = { version = "2.5.7", features = ["rustls-tls"] }
|
|
tauri-plugin-opener = "2"
|
|
tauri-plugin-dialog = "2"
|
|
tauri-plugin-fs = "2"
|
|
# Minor-pinned per the plugin's own guidance: configure_client hands it a
|
|
# preconfigured rustls ClientConfig, and a 2.x minor bump can change the
|
|
# plugin's bundled reqwest/rustls and break that seam at runtime.
|
|
tauri-plugin-updater = "2.10"
|
|
tauri-plugin-process = "2"
|
|
url = "2"
|
|
tokio-tungstenite = { version = "0.30.0", features = ["rustls-tls-webpki-roots"] }
|
|
futures-util = "0.3.32"
|
|
tokio = { version = "1", features = ["sync", "net", "io-util", "rt", "macros"] }
|
|
tokio-rustls = { version = "0.26", default-features = false }
|
|
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
|
|
# Mozilla root bundle for the updater's HostScopedVerifier: non-pinned hosts
|
|
# (the GitHub installer download) get web-PKI validation. Already in the
|
|
# dependency tree via tokio-tungstenite's rustls-tls-webpki-roots feature.
|
|
webpki-roots = "1"
|
|
ring = "0.17"
|
|
log = "0.4"
|
|
# Writes Rust logs to a rotating file under the OS app-log dir (alongside the
|
|
# TS client-logs) so a shipped user can retrieve them — a release build detaches
|
|
# the console, so stdout/stderr logging is otherwise unreachable.
|
|
tauri-plugin-log = "2"
|
|
# The backend features are NOT optional extras — keyring 3.x declares no
|
|
# `default` feature at all, and every platform arm in its lib.rs falls back to
|
|
# `pub use mock as default` when its backend feature is off. A bare
|
|
# `keyring = "3"` therefore compiles the in-memory mock store on Windows, macOS
|
|
# AND Linux: `set_password` succeeds into a per-Entry cell that is dropped when
|
|
# the Entry goes out of scope, and the next `Entry::new(..).get_password()`
|
|
# returns NoEntry. Nothing ever reaches Credential Manager / Keychain /
|
|
# Secret Service. Removing any of these silently reverts a platform to that
|
|
# store — `secret_store::tests::compiled_keyring_backend_is_persistent` fails
|
|
# the build if that happens.
|
|
# windows-native -> Windows Credential Manager (DPAPI-backed)
|
|
# apple-native -> macOS Keychain
|
|
# sync-secret-service -> Secret Service (GNOME Keyring / KWallet) over libdbus.
|
|
# Chosen over async-secret-service because our Tauri
|
|
# commands are blocking `fn`s on Tauri's worker pool;
|
|
# the async backend would need a nested runtime.
|
|
# Build-time system dep: libdbus-1-dev.
|
|
# crypto-rust -> pure-Rust session crypto for the Secret Service
|
|
# transport (avoids linking OpenSSL for it).
|
|
keyring = { version = "3", default-features = false, features = [
|
|
"windows-native",
|
|
"apple-native",
|
|
"sync-secret-service",
|
|
"crypto-rust",
|
|
] }
|
|
# Scrubs the plaintext secret copies that the DPAPI fallback has to materialize
|
|
# as `Vec<u8>` for the Win32 call.
|
|
zeroize = "1"
|
|
# Encodes the DPAPI ciphertext for the JSON fallback store. Already in the tree
|
|
# via the tauri/rustls stack, so this costs no extra build.
|
|
base64 = "0.22"
|
|
# Native message box for the fatal-startup path in lib.rs, where the Tauri app
|
|
# never built and tauri-plugin-dialog has no AppHandle to run through. Already
|
|
# in the tree via that same plugin, so this costs no extra build -- but only
|
|
# while the versions match: the plugin pins ^0.16, and Cargo unifies features
|
|
# only within a semver-compatible group. Moving this to 0.17 forks rfd into two
|
|
# crates, and the copy without the plugin's backend features fails rfd 0.17's
|
|
# build.rs on Linux. Pinned to the plugin in .github/dependabot.yml; bump both
|
|
# together or neither.
|
|
rfd = { version = "0.16", default-features = false }
|
|
|
|
# Desktop-only plugins (no mobile bundle target). single-instance carries the
|
|
# "deep-link" feature so an owncord:// link fired at a running app is forwarded
|
|
# to it instead of spawning a duplicate window.
|
|
[target.'cfg(any(target_os = "macos", windows, target_os = "linux"))'.dependencies]
|
|
tauri-plugin-single-instance = { version = "2", features = ["deep-link"] }
|
|
tauri-plugin-window-state = "2"
|
|
tauri-plugin-autostart = "2"
|
|
tauri-plugin-deep-link = "2"
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
windows = { version = "0.58", features = ["Win32_UI_Input_KeyboardAndMouse"] }
|
|
# DPAPI (CryptProtectData/CryptUnprotectData) for the last-resort credential
|
|
# fallback in secret_store. Version tracks keyring's own windows-sys dep so the
|
|
# two share one build of the crate.
|
|
windows-sys = { version = "0.60", features = [
|
|
"Win32_Foundation",
|
|
"Win32_Security_Cryptography",
|
|
] }
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
device_query = "2"
|
|
# Direct access to the WebKitGTK webview for voice/video support. WebKitGTK
|
|
# denies getUserMedia/enumerateDevices permission requests by default (wry
|
|
# installs no handler on Linux, unlike its macOS backend which auto-grants),
|
|
# and ships with media-stream/WebRTC settings off — so microphones and cameras
|
|
# are invisible to the webview without this hook. Version-pinned to match
|
|
# wry's own `=2.0.2` pin so both link the same crate build; v2_38 gates the
|
|
# enable-webrtc setting.
|
|
webkit2gtk = { version = "=2.0.2", features = ["v2_38"] }
|