From efc334af8e97f16adc92e9ecdc63437160bcd40b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Monnom?= Date: Mon, 26 Jun 2023 22:59:55 +0200 Subject: [PATCH] feat: move signal_client to livekit-api (#98) --- Cargo.lock | 38 +++++++++++++++++-- examples/Cargo.lock | 17 +++++++++ livekit-api/Cargo.toml | 37 +++++++++++++++--- livekit-api/src/lib.rs | 7 ++++ .../src/signal_client/mod.rs | 6 +-- .../src/signal_client/signal_stream.rs | 2 - livekit/Cargo.toml | 13 +++---- livekit/src/lib.rs | 1 - livekit/src/room/mod.rs | 2 +- livekit/src/rtc_engine/mod.rs | 2 +- livekit/src/rtc_engine/rtc_session.rs | 2 +- 11 files changed, 102 insertions(+), 25 deletions(-) rename {livekit => livekit-api}/src/signal_client/mod.rs (96%) rename {livekit => livekit-api}/src/signal_client/signal_stream.rs (99%) diff --git a/Cargo.lock b/Cargo.lock index 491a5f2..a55de55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -625,6 +625,19 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" +dependencies = [ + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -783,6 +796,7 @@ version = "0.1.1" dependencies = [ "futures-util", "lazy_static", + "livekit-api", "livekit-protocol", "livekit-webrtc", "log", @@ -792,22 +806,25 @@ dependencies = [ "serde_json", "thiserror", "tokio", - "tokio-tungstenite", - "url", ] [[package]] name = "livekit-api" version = "0.1.0" dependencies = [ + "futures-util", "jsonwebtoken", "livekit-protocol", + "log", + "parking_lot", "prost", "reqwest", "serde", "serde_json", "sha2", "thiserror", + "tokio", + "tokio-tungstenite", "url", ] @@ -1253,6 +1270,7 @@ dependencies = [ "http", "http-body", "hyper", + "hyper-rustls", "hyper-tls", "ipnet", "js-sys", @@ -1262,16 +1280,21 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls", + "rustls-native-certs", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", + "tokio-rustls", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "webpki-roots 0.22.6", "winreg", ] @@ -1690,7 +1713,7 @@ dependencies = [ "tokio-native-tls", "tokio-rustls", "tungstenite", - "webpki-roots", + "webpki-roots 0.23.1", ] [[package]] @@ -1931,6 +1954,15 @@ dependencies = [ "untrusted", ] +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki", +] + [[package]] name = "webpki-roots" version = "0.23.1" diff --git a/examples/Cargo.lock b/examples/Cargo.lock index f66ed2f..15c35b1 100644 --- a/examples/Cargo.lock +++ b/examples/Cargo.lock @@ -1479,6 +1479,7 @@ version = "0.1.1" dependencies = [ "futures-util", "lazy_static", + "livekit-api", "livekit-protocol", "livekit-webrtc", "log", @@ -1488,6 +1489,22 @@ dependencies = [ "serde_json", "thiserror", "tokio", +] + +[[package]] +name = "livekit-api" +version = "0.1.0" +dependencies = [ + "futures-util", + "livekit-protocol", + "log", + "parking_lot", + "prost", + "serde", + "serde_json", + "sha2", + "thiserror", + "tokio", "tokio-tungstenite", "url", ] diff --git a/livekit-api/Cargo.toml b/livekit-api/Cargo.toml index 29590fd..4c5483a 100644 --- a/livekit-api/Cargo.toml +++ b/livekit-api/Cargo.toml @@ -3,13 +3,38 @@ name = "livekit-api" version = "0.1.0" edition = "2021" +[features] +# By default ws TLS is not enabled +default = ["services", "access-token"] + +signal-client = ["dep:tokio-tungstenite", "dep:tokio", "dep:futures-util" ] +services = ["dep:reqwest"] +access-token = ["dep:jsonwebtoken"] + +# Note that the following features only change the behavior of tokio-tungstenite. +# It doesn't change the behavior of libwebrtc/webrtc-sys +native-tls = ["tokio-tungstenite?/native-tls", "reqwest?/native-tls"] +native-tls-vendored = ["tokio-tungstenite?/native-tls-vendored", "reqwest?/native-tls-vendored"] +rustls-tls-native-roots = ["tokio-tungstenite?/rustls-tls-native-roots", "reqwest?/rustls-tls-native-roots"] +rustls-tls-webpki-roots = ["tokio-tungstenite?/rustls-tls-webpki-roots", "reqwest?/rustls-tls-webpki-roots"] +__rustls-tls = ["tokio-tungstenite?/__rustls-tls", "reqwest?/__rustls"] + [dependencies] -jsonwebtoken = {version = "8", default-features = false } -thiserror = "1.0" -serde = {version = "1.0", features = ["derive"] } -serde_json = "1.0" livekit-protocol = { path = "../livekit-protocol", version = "0.1.0" } +thiserror = "1.0" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" sha2 = "0.10.6" -reqwest = { version = "0.11", features=["json"] } url = "2.3.1" -prost = "0.11.9" +log = "0.4" +parking_lot = { version = "0.12.1" } +prost = "0.11" + +# access_token & services +jsonwebtoken = { version = "8", default-features = false, optional = true } +reqwest = { version = "0.11", default-features = false, features = ["json"], optional = true } + +# signal_client +tokio-tungstenite = { version = "0.19", optional = true } +tokio = { version = "1", features = ["full"], optional = true } +futures-util = { version = "0.3", default-features = false, features = ["sink"], optional = true } \ No newline at end of file diff --git a/livekit-api/src/lib.rs b/livekit-api/src/lib.rs index b5f6808..c4f86e4 100644 --- a/livekit-api/src/lib.rs +++ b/livekit-api/src/lib.rs @@ -1,7 +1,14 @@ +#[cfg(feature = "access-token")] pub mod access_token; + +#[cfg(feature = "services")] pub mod services; + +#[cfg(feature = "signal-client")] +pub mod signal_client; pub mod webhook_receiver; +#[allow(dead_code)] pub(crate) fn get_env_keys() -> Result<(String, String), std::env::VarError> { let api_key = std::env::var("LIVEKIT_API_KEY")?; let api_secret = std::env::var("LIVEKIT_API_SECRET")?; diff --git a/livekit/src/signal_client/mod.rs b/livekit-api/src/signal_client/mod.rs similarity index 96% rename from livekit/src/signal_client/mod.rs rename to livekit-api/src/signal_client/mod.rs index 20f9cc3..2245130 100644 --- a/livekit/src/signal_client/mod.rs +++ b/livekit-api/src/signal_client/mod.rs @@ -10,9 +10,9 @@ use tokio_tungstenite::tungstenite::Error as WsError; mod signal_stream; -pub(crate) type SignalEmitter = mpsc::Sender; -pub(crate) type SignalEvents = mpsc::Receiver; -pub(crate) type SignalResult = Result; +pub type SignalEmitter = mpsc::Sender; +pub type SignalEvents = mpsc::Receiver; +pub type SignalResult = Result; pub const JOIN_RESPONSE_TIMEOUT: Duration = Duration::from_secs(5); pub const PROTOCOL_VERSION: u32 = 8; diff --git a/livekit/src/signal_client/signal_stream.rs b/livekit-api/src/signal_client/signal_stream.rs similarity index 99% rename from livekit/src/signal_client/signal_stream.rs rename to livekit-api/src/signal_client/signal_stream.rs index 4e85783..b04d632 100644 --- a/livekit/src/signal_client/signal_stream.rs +++ b/livekit-api/src/signal_client/signal_stream.rs @@ -11,8 +11,6 @@ use tokio_tungstenite::tungstenite::protocol::CloseFrame; use tokio_tungstenite::tungstenite::Message; use tokio_tungstenite::{connect_async, MaybeTlsStream, WebSocketStream}; -use super::SignalEvents; - type WebSocket = WebSocketStream>; #[derive(Debug)] diff --git a/livekit/Cargo.toml b/livekit/Cargo.toml index 53dfab8..c07ab0d 100644 --- a/livekit/Cargo.toml +++ b/livekit/Cargo.toml @@ -12,22 +12,21 @@ default = [] # Note that the following features only change the behavior of tokio-tungstenite. # It doesn't change the behavior of libwebrtc/webrtc-sys -native-tls = ["tokio-tungstenite/native-tls"] -native-tls-vendored = ["tokio-tungstenite/native-tls-vendored"] -rustls-tls-native-roots = ["tokio-tungstenite/rustls-tls-native-roots"] -rustls-tls-webpki-roots = ["tokio-tungstenite/rustls-tls-webpki-roots"] -__rustls-tls = ["tokio-tungstenite/__rustls-tls"] +native-tls = ["livekit-api/native-tls"] +native-tls-vendored = ["livekit-api/native-tls-vendored"] +rustls-tls-native-roots = ["livekit-api/rustls-tls-native-roots"] +rustls-tls-webpki-roots = ["livekit-api/rustls-tls-webpki-roots"] +__rustls-tls = ["livekit-api/__rustls-tls"] [dependencies] +livekit-api = { path = "../livekit-api", version = "0.1.0", default-features = false, features = ["signal-client"] } livekit-webrtc = { path = "../livekit-webrtc", version = "0.1.1" } livekit-protocol = { path = "../livekit-protocol", version = "0.1.0" } prost = "0.11" serde = { version = "1", features = ["derive"] } serde_json = "1.0" -tokio-tungstenite = { version = "0.19" } tokio = { version = "1", features = ["full"] } parking_lot = { version = "0.12.1" } -url = "2.3" futures-util = { version = "0.3", default-features = false, features = ["sink"] } thiserror = "1.0" lazy_static = "1.4" diff --git a/livekit/src/lib.rs b/livekit/src/lib.rs index 1b1e748..d05e6b9 100644 --- a/livekit/src/lib.rs +++ b/livekit/src/lib.rs @@ -3,7 +3,6 @@ extern crate core; pub mod proto; mod room; mod rtc_engine; -mod signal_client; pub mod webrtc { pub use livekit_webrtc::*; diff --git a/livekit/src/room/mod.rs b/livekit/src/room/mod.rs index dc09f4a..005d974 100644 --- a/livekit/src/room/mod.rs +++ b/livekit/src/room/mod.rs @@ -3,7 +3,7 @@ use crate::participant::ConnectionQuality; use crate::prelude::*; use crate::rtc_engine::EngineError; use crate::rtc_engine::{EngineEvent, EngineEvents, EngineResult, RtcEngine}; -use crate::signal_client::SignalOptions; +use livekit_api::signal_client::SignalOptions; use livekit_protocol as proto; use livekit_protocol::observer::Dispatcher; use parking_lot::{Mutex, RwLock, RwLockReadGuard}; diff --git a/livekit/src/rtc_engine/mod.rs b/livekit/src/rtc_engine/mod.rs index b8742d0..d71ed12 100644 --- a/livekit/src/rtc_engine/mod.rs +++ b/livekit/src/rtc_engine/mod.rs @@ -2,8 +2,8 @@ use crate::options::TrackPublishOptions; use crate::prelude::LocalTrack; use crate::rtc_engine::lk_runtime::LkRuntime; use crate::rtc_engine::rtc_session::{RtcSession, SessionEvent, SessionEvents}; -use crate::signal_client::{SignalError, SignalOptions}; use crate::DataPacketKind; +use livekit_api::signal_client::{SignalError, SignalOptions}; use livekit_protocol as proto; use livekit_webrtc::prelude::*; use livekit_webrtc::session_description::SdpParseError; diff --git a/livekit/src/rtc_engine/rtc_session.rs b/livekit/src/rtc_engine/rtc_session.rs index e31b926..3db651e 100644 --- a/livekit/src/rtc_engine/rtc_session.rs +++ b/livekit/src/rtc_engine/rtc_session.rs @@ -4,9 +4,9 @@ use crate::prelude::TrackKind; use crate::rtc_engine::lk_runtime::LkRuntime; use crate::rtc_engine::peer_transport::PeerTransport; use crate::rtc_engine::rtc_events::{RtcEvent, RtcEvents}; -use crate::signal_client::{SignalClient, SignalEvent, SignalEvents, SignalOptions}; use crate::track::LocalTrack; use crate::DataPacketKind; +use livekit_api::signal_client::{SignalClient, SignalEvent, SignalEvents, SignalOptions}; use livekit_protocol as proto; use livekit_webrtc::prelude::*; use parking_lot::Mutex;