use rkyv::{Archive, Deserialize, Serialize};
#[derive(Archive, Serialize, Deserialize, Debug, Clone)]
#[rkyv(derive(Debug))]
pub struct AuthRequest {
pub hmac_base: Vec<u8>,
pub hmac_signature: [u8; 32],
pub client_pk: [u8; 32],
pub nonce: [u8; 32],
pub timestamp: u64,
}
#[derive(Archive, Serialize, Deserialize, Debug, Clone)]
#[rkyv(derive(Debug))]
pub struct AuthResponse {
pub token: Vec<u8>,
pub valid_until: u64,
pub warning: Option<EmergencyWarning>,
}
#[derive(Archive, Serialize, Deserialize, Debug, Clone)]
#[rkyv(derive(Debug))]
pub struct EmergencyWarning {
pub level: String,
pub action: String,
pub trigger_after: u64,
}
#[derive(Archive, Serialize, Deserialize, Debug, Clone)]
#[rkyv(derive(Debug))]
pub struct TokenPayload {
pub user_id: u64,
pub nonce: [u8; 32],
pub issued_at: u64,
pub valid_until: u64,
}
#[derive(Archive, Serialize, Deserialize, Debug, Clone)]
#[rkyv(derive(Debug))]
pub struct ConnRecord {
pub conn_id: u64,
pub metadata: ConnMeta,
pub created_at: u64,
pub last_active: u64,
pub access_count: u32,
pub txid: u64,
}
#[derive(Archive, Serialize, Deserialize, Debug, Clone)]
#[rkyv(derive(Debug))]
pub struct ConnMeta {
pub client_addr: [u8; 16],
pub nat_entry: (u16, u16),
pub assigned_pod: u32,
pub stream_states: Vec<StreamState>,
}
#[derive(Archive, Serialize, Deserialize, Debug, Clone)]
#[rkyv(derive(Debug))]
pub struct StreamState {
pub stream_id: u32,
pub bytes_sent: u64,
pub bytes_received: u64,
pub is_closed: bool,
}