Skip to main content

actr_hyper/wire/
mod.rs

1//! Wire Layer 0: Physical wire layer
2//!
3//! Low-level transport implementations:
4//! - webrtc: WebRTC transport (DataChannel, MediaTrack, Coordinator, Signaling)
5//! - websocket: WebSocket transport
6//!
7//! **Note**: For intra-process communication, use `crate::transport::HostTransport`
8
9pub mod webrtc;
10pub(crate) mod websocket;
11
12use crate::key_cache::KeyFetcher;
13use actr_protocol::{AIdCredential, ActrId};
14use async_trait::async_trait;
15
16/// Adapter from SignalingClient to KeyFetcher
17///
18/// `KeyFetcher::fetch_key` only accepts `key_id`, while `SignalingClient::get_signing_key` also
19/// requires `actor_id` and `credential`. This adapter holds the context and forwards calls to the
20/// underlying signaling client.
21pub(crate) struct SignalingKeyFetcher {
22    pub(crate) client: std::sync::Arc<dyn webrtc::SignalingClient>,
23    pub(crate) actor_id: ActrId,
24    pub(crate) credential: AIdCredential,
25}
26
27#[async_trait]
28impl KeyFetcher for SignalingKeyFetcher {
29    async fn fetch_key(&self, key_id: u32) -> crate::error::HyperResult<(u32, Vec<u8>)> {
30        self.client
31            .get_signing_key(self.actor_id.clone(), self.credential.clone(), key_id)
32            .await
33            .map_err(|e| {
34                tracing::warn!(key_id, error = ?e, "SignalingKeyFetcher: failed to fetch AIS public key via signaling");
35                crate::error::HyperError::AisBootstrapFailed(format!(
36                    "signaling get_signing_key failed: {e:?}"
37                ))
38            })
39    }
40}
41
42// Re-export commonly used types. Submodule-internal types (gate / negotiator /
43// connection / websocket) stay reachable via module paths rather than
44// duplicated re-exports here.
45pub use webrtc::{
46    AuthConfig, AuthType, DisconnectReason, ReconnectConfig, SignalingClient, SignalingConfig,
47    SignalingEvent, SignalingStats, WebRtcConfig,
48};
49#[cfg(feature = "test-utils")]
50pub use webrtc::{WebRtcCoordinator, WebSocketSignalingClient};