soblendwa 0.1.0

SoblendWA: a blazing fast WhatsApp Web multi-device client library written in Rust. Crafted by Soblend Development Studio.
Documentation
#[derive(Clone, PartialEq, prost::Message)]
pub struct HandshakeMessage {
    #[prost(message, optional, tag = "2")]
    pub client_hello: Option<ClientHello>,
    #[prost(message, optional, tag = "3")]
    pub server_hello: Option<ServerHello>,
    #[prost(message, optional, tag = "4")]
    pub client_finish: Option<ClientFinish>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct ClientHello {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub ephemeral: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub static_key: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub payload: Option<Vec<u8>>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct ServerHello {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub ephemeral: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub static_key: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub payload: Option<Vec<u8>>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct ClientFinish {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub static_key: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub payload: Option<Vec<u8>>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct CertChain {
    #[prost(message, optional, tag = "1")]
    pub leaf: Option<NoiseCertificate>,
    #[prost(message, optional, tag = "2")]
    pub intermediate: Option<NoiseCertificate>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct NoiseCertificate {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub details: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub signature: Option<Vec<u8>>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct CertificateDetails {
    #[prost(uint32, optional, tag = "1")]
    pub serial: Option<u32>,
    #[prost(uint32, optional, tag = "2")]
    pub issuer_serial: Option<u32>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub key: Option<Vec<u8>>,
    #[prost(uint64, optional, tag = "4")]
    pub not_before: Option<u64>,
    #[prost(uint64, optional, tag = "5")]
    pub not_after: Option<u64>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct ClientPayload {
    #[prost(uint64, optional, tag = "1")]
    pub username: Option<u64>,
    #[prost(bool, optional, tag = "3")]
    pub passive: Option<bool>,
    #[prost(message, optional, tag = "5")]
    pub user_agent: Option<UserAgent>,
    #[prost(message, optional, tag = "6")]
    pub web_info: Option<WebInfo>,
    #[prost(string, optional, tag = "7")]
    pub push_name: Option<String>,
    #[prost(int32, optional, tag = "12")]
    pub connect_type: Option<i32>,
    #[prost(int32, optional, tag = "13")]
    pub connect_reason: Option<i32>,
    #[prost(uint32, optional, tag = "18")]
    pub device: Option<u32>,
    #[prost(message, optional, tag = "19")]
    pub device_pairing_data: Option<DevicePairingRegistrationData>,
    #[prost(bool, optional, tag = "33")]
    pub pull: Option<bool>,
    #[prost(bool, optional, tag = "41")]
    pub lid_db_migrated: Option<bool>,
}

impl ClientPayload {
    pub const CONNECT_TYPE_WIFI_UNKNOWN: i32 = 1;
    pub const CONNECT_REASON_USER_ACTIVATED: i32 = 1;
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct UserAgent {
    #[prost(int32, optional, tag = "1")]
    pub platform: Option<i32>,
    #[prost(message, optional, tag = "2")]
    pub app_version: Option<AppVersion>,
    #[prost(string, optional, tag = "3")]
    pub mcc: Option<String>,
    #[prost(string, optional, tag = "4")]
    pub mnc: Option<String>,
    #[prost(string, optional, tag = "5")]
    pub os_version: Option<String>,
    #[prost(string, optional, tag = "6")]
    pub manufacturer: Option<String>,
    #[prost(string, optional, tag = "7")]
    pub device: Option<String>,
    #[prost(string, optional, tag = "8")]
    pub os_build_number: Option<String>,
    #[prost(int32, optional, tag = "10")]
    pub release_channel: Option<i32>,
    #[prost(string, optional, tag = "11")]
    pub locale_language_iso_639_1: Option<String>,
    #[prost(string, optional, tag = "12")]
    pub locale_country_iso_3166_1_alpha_2: Option<String>,
}

impl UserAgent {
    pub const PLATFORM_WEB: i32 = 14;
    pub const RELEASE_CHANNEL_RELEASE: i32 = 0;
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct AppVersion {
    #[prost(uint32, optional, tag = "1")]
    pub primary: Option<u32>,
    #[prost(uint32, optional, tag = "2")]
    pub secondary: Option<u32>,
    #[prost(uint32, optional, tag = "3")]
    pub tertiary: Option<u32>,
    #[prost(uint32, optional, tag = "4")]
    pub quaternary: Option<u32>,
    #[prost(uint32, optional, tag = "5")]
    pub quinary: Option<u32>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct WebInfo {
    #[prost(string, optional, tag = "1")]
    pub ref_token: Option<String>,
    #[prost(string, optional, tag = "2")]
    pub version: Option<String>,
    #[prost(int32, optional, tag = "4")]
    pub web_sub_platform: Option<i32>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct DevicePairingRegistrationData {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub e_regid: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub e_keytype: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub e_ident: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "4")]
    pub e_skey_id: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "5")]
    pub e_skey_val: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "6")]
    pub e_skey_sig: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "7")]
    pub build_hash: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "8")]
    pub device_props: Option<Vec<u8>>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct DeviceProps {
    #[prost(string, optional, tag = "1")]
    pub os: Option<String>,
    #[prost(message, optional, tag = "2")]
    pub version: Option<AppVersion>,
    #[prost(int32, optional, tag = "3")]
    pub platform_type: Option<i32>,
    #[prost(bool, optional, tag = "4")]
    pub require_full_sync: Option<bool>,
    #[prost(message, optional, tag = "5")]
    pub history_sync_config: Option<HistorySyncConfig>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct HistorySyncConfig {
    #[prost(uint32, optional, tag = "1")]
    pub full_sync_days_limit: Option<u32>,
    #[prost(uint32, optional, tag = "2")]
    pub full_sync_size_mb_limit: Option<u32>,
    #[prost(uint32, optional, tag = "3")]
    pub storage_quota_mb: Option<u32>,
    #[prost(bool, optional, tag = "4")]
    pub inline_initial_payload_in_e2ee_msg: Option<bool>,
    #[prost(uint32, optional, tag = "5")]
    pub recent_sync_days_limit: Option<u32>,
    #[prost(bool, optional, tag = "6")]
    pub support_call_log_history: Option<bool>,
    #[prost(bool, optional, tag = "7")]
    pub support_bot_user_agent_chat_history: Option<bool>,
    #[prost(bool, optional, tag = "8")]
    pub support_cag_reactions_and_polls: Option<bool>,
    #[prost(bool, optional, tag = "9")]
    pub support_biz_hosted_msg: Option<bool>,
    #[prost(bool, optional, tag = "10")]
    pub support_recent_sync_chunk_message_count_tuning: Option<bool>,
    #[prost(bool, optional, tag = "11")]
    pub support_hosted_group_msg: Option<bool>,
    #[prost(bool, optional, tag = "12")]
    pub support_fbid_bot_chat_history: Option<bool>,
    #[prost(bool, optional, tag = "14")]
    pub support_message_association: Option<bool>,
    #[prost(bool, optional, tag = "15")]
    pub support_group_history: Option<bool>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct AdvSignedDeviceIdentityHmac {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub details: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub hmac: Option<Vec<u8>>,
    #[prost(int32, optional, tag = "3")]
    pub account_type: Option<i32>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct AdvSignedDeviceIdentity {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub details: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub account_signature_key: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub account_signature: Option<Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "4")]
    pub device_signature: Option<Vec<u8>>,
}

#[derive(Clone, PartialEq, prost::Message)]
pub struct AdvDeviceIdentity {
    #[prost(uint32, optional, tag = "1")]
    pub raw_id: Option<u32>,
    #[prost(uint64, optional, tag = "2")]
    pub timestamp: Option<u64>,
    #[prost(uint32, optional, tag = "3")]
    pub key_index: Option<u32>,
    #[prost(int32, optional, tag = "4")]
    pub account_type: Option<i32>,
    #[prost(int32, optional, tag = "5")]
    pub device_type: Option<i32>,
}

pub const ADV_ENCRYPTION_HOSTED: i32 = 1;