use serde::Deserialize;
use serde::Serialize;
use serde_json::Value;
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct PeerInfo {
pub did: String,
pub state: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ConnectPeerViaHttpRequest {
pub url: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ConnectPeerViaHttpResponse {
pub did: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ConnectWithDidRequest {
pub did: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ConnectWithDidResponse {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct SeedPeer {
pub did: String,
pub url: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ConnectWithSeedRequest {
pub peers: Vec<SeedPeer>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ConnectWithSeedResponse {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ListPeersRequest {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ListPeersResponse {
pub peers: Vec<PeerInfo>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct CreateOfferRequest {
pub did: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct CreateOfferResponse {
pub offer: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct AnswerOfferRequest {
pub offer: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct AnswerOfferResponse {
pub answer: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct AcceptAnswerRequest {
pub answer: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct AcceptAnswerResponse {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct DisconnectRequest {
pub did: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct DisconnectResponse {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct SendBackendMessageRequest {
pub destination_did: String,
pub namespace: String,
pub data: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct SendBackendMessageResponse {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct SendE2eHandshakeRequest {
pub destination_did: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct SendE2eHandshakeResponse {
pub tx_id: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct SendE2eMessageRequest {
pub destination_did: String,
pub recipient_public_key: String,
pub data: String,
#[serde(default)]
pub max_plaintext_frame_len: u32,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct SendE2eMessageResponse {
pub stream_id: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct PublishMessageToTopicRequest {
pub topic: String,
pub data: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct PublishMessageToTopicResponse {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct FetchTopicMessagesRequest {
pub topic: String,
pub skip: i64,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct FetchTopicMessagesResponse {
pub data: Vec<String>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct RegisterServiceRequest {
pub name: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct RegisterServiceResponse {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct LookupServiceRequest {
pub name: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct LookupServiceResponse {
pub dids: Vec<String>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct LookupOnlineNodesRequest {
#[serde(default)]
pub include_expired: bool,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub enum OnlineNodeTypeInfo {
#[default]
Native,
Browser,
Ffi,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct OnlineNodeDescriptorInfo {
pub did: String,
pub public_key: Value,
pub session_public_key: Value,
pub node_type: OnlineNodeTypeInfo,
pub network_id: u32,
pub storage_redundancy: u16,
pub dht_virtual_nodes: u16,
pub capabilities: Vec<String>,
pub endpoint_hint: Option<String>,
pub started_at_ms: u64,
pub heartbeat_at_ms: u64,
pub expires_at_ms: u64,
pub version: String,
pub signature: Value,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct LookupOnlineNodesResponse {
pub nodes: Vec<OnlineNodeDescriptorInfo>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub enum OnionExitTransportInfo {
#[default]
Tcp,
Udp,
WebTransport,
RequestResponse,
Https,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct OnionExitServiceInfo {
pub name: String,
pub transport: OnionExitTransportInfo,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct OnionExitPolicyInfo {
pub allowed_targets: Vec<String>,
pub denied_targets: Vec<String>,
pub max_circuits: u32,
pub max_streams_per_circuit: u32,
pub max_bytes_per_minute: u64,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct OnionExitDescriptorInfo {
pub did: String,
pub public_key: Value,
pub session_public_key: Value,
pub node_type: OnlineNodeTypeInfo,
pub network_id: u32,
pub services: Vec<OnionExitServiceInfo>,
pub policy: OnionExitPolicyInfo,
pub started_at_ms: u64,
pub heartbeat_at_ms: u64,
pub expires_at_ms: u64,
pub version: String,
pub signature: Value,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct LookupOnionExitsRequest {
#[serde(default)]
pub service: String,
#[serde(default)]
pub include_expired: bool,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct LookupOnionExitsResponse {
pub exits: Vec<OnionExitDescriptorInfo>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct BuildOnionRouteRequest {
pub service: String,
#[serde(default)]
pub hop_count: u32,
#[serde(default)]
pub allow_short_paths: bool,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct BuildOnionRouteResponse {
pub hops: Vec<String>,
pub service: String,
pub exit: OnionExitDescriptorInfo,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct NodeInfoRequest {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct FingerTableRange {
pub did: Option<String>,
pub start: u64,
pub end: u64,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct DhtInfo {
pub did: String,
pub successors: Vec<String>,
pub predecessor: Option<String>,
pub finger_table_ranges: Vec<FingerTableRange>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct StorageValue {
pub did: String,
pub kind: String,
pub data: Vec<String>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct StorageItem {
pub key: String,
pub value: Option<StorageValue>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct StorageInfo {
pub items: Vec<StorageItem>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct SwarmInfo {
pub peers: Vec<PeerInfo>,
pub dht: Option<DhtInfo>,
pub persistence_storage: Option<StorageInfo>,
pub cache_storage: Option<StorageInfo>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct NodeInfoResponse {
pub version: String,
pub swarm: Option<SwarmInfo>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct PeerMeasurementRequest {
pub did: String,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ListPeerMeasurementsRequest {
pub limit: Option<u32>,
pub cursor: Option<String>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct PeerMeasurementCountersInfo {
pub connected: u64,
pub disconnected: u64,
pub sent: u64,
pub failed_to_send: u64,
pub received: u64,
pub failed_to_receive: u64,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct PeerCreditInfo {
pub bytes_sent_to_peer: u64,
pub bytes_received_from_peer: u64,
pub last_seen_seconds: u64,
pub score: f64,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PeerReliabilityInfo {
Healthy,
#[default]
Unknown,
Degraded,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct PeerMeasurementInfo {
pub did: String,
pub counters: PeerMeasurementCountersInfo,
pub credit: Option<PeerCreditInfo>,
pub reliability: PeerReliabilityInfo,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct ListPeerMeasurementsResponse {
pub measurements: Vec<PeerMeasurementInfo>,
pub next_cursor: Option<String>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct PeerMeasurementResponse {
pub measurement: Option<PeerMeasurementInfo>,
}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct NodeDidRequest {}
#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
pub struct NodeDidResponse {
pub did: String,
}