[workspace] members = [".", "crates/core", "desktop"] default-members = [".", "crates/core"] resolver = "3" [workspace.package] version = "2.5.0" edition = "2024" rust-version = "1.94" license = "PolyForm-Noncommercial-1.0.0" [workspace.dependencies] anyhow = "1" axum = { version = "0.8", features = ["ws"] } base64 = "0.22" chrono = { version = "0.4", features = ["serde"] } clap = { version = "4", features = ["derive", "env"] } cookie = "0.18" futures-util = { version = "0.3", features = ["sink"] } getrandom = "0.4" hex = "0.4" http = "1" mime_guess = "2" percent-encoding = "2" regex = "1" reqwest = { version = "0.13", default-features = false, features = ["rustls", "json", "form", "query", "gzip", "cookies", "socks", "stream"] } reqwest-websocket = "0.6" rust-embed = { version = "8", features = ["deterministic-timestamps"] } scrypt = { version = "0.12", default-features = false } semver = "1" serde = { version = "1", features = ["derive"] } serde_json = "1" sha2 = "0.11" socketioxide = { version = "0.18", features = ["extensions"] } subtle = "2" tempfile = "3" thiserror = "2" tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal", "sync", "time", "net", "fs"] } tokio-util = { version = "0.7", features = ["rt"] } tracing = "0.1" tracing-appender = "0.2" tracing-subscriber = { version = "0.3", features = ["env-filter"] } twitch_oauth2 = { version = "0.17", features = ["client"] } tungstenite = { version = "0.28", default-features = false } unicode-casefold = "0.2" url = { version = "2", features = ["serde"] } [package] name = "twitch-drops-miner" version.workspace = true edition = "2024" rust-version = "1.94" license = "PolyForm-Noncommercial-1.0.0" description = "A self-hosted Twitch Drops miner with a React dashboard" repository = "https://github.com/ohne-b/twitch-drops-miner" default-run = "twitch-drops-miner" [features] dashboard-fixture = ["twitch-drops-miner-core/dashboard-fixture"] [[bin]] name = "twitch-drops-miner" path = "src/main.rs" [[bin]] name = "dashboard-fixture" path = "src/bin/dashboard-fixture.rs" required-features = ["dashboard-fixture"] [dependencies] twitch-drops-miner-core = { path = "crates/core" } anyhow.workspace = true axum.workspace = true base64.workspace = true chrono.workspace = true clap.workspace = true cookie.workspace = true futures-util.workspace = true getrandom.workspace = true hex.workspace = true http.workspace = true mime_guess.workspace = true reqwest.workspace = true reqwest-websocket.workspace = true rust-embed.workspace = true scrypt.workspace = true semver.workspace = true serde.workspace = true serde_json.workspace = true sha2.workspace = true socketioxide.workspace = true subtle.workspace = true tempfile.workspace = true thiserror.workspace = true tokio.workspace = true tokio-util.workspace = true tracing.workspace = true url.workspace = true [dev-dependencies] http-body-util = "0.1" tokio = { version = "1", features = ["test-util"] } tower = { version = "0.5", features = ["util"] } wiremock = "0.6" [profile.release] strip = true lto = "thin" # Keep the production password cost usable in development and browser tests too. [profile.dev.package.scrypt] opt-level = 3 [profile.dev.package.salsa20] opt-level = 3 [lints.rust] unsafe_code = "forbid"