Skip to main content

fetch_accounts/
fetch_accounts.rs

1use beeper_desktop_api::BeeperClient;
2use std::env;
3
4#[tokio::main]
5async fn main() -> Result<(), Box<dyn std::error::Error>> {
6    // Get authentication token from environment variable
7    let token = env::var("BEEPER_TOKEN")
8        .unwrap_or_else(|_| {
9            eprintln!("Error: BEEPER_TOKEN environment variable not set");
10            eprintln!("Usage: BEEPER_TOKEN=your_token cargo run --example fetch_accounts");
11            std::process::exit(1);
12        });
13
14    // Get API base URL from environment variable or use default
15    let base_url = env::var("BEEPER_API_URL")
16        .unwrap_or_else(|_| "http://localhost:23373".to_string());
17
18    println!("Connecting to Beeper Desktop API at: {}", base_url);
19    println!();
20
21    // Create a client with the provided token
22    let client = BeeperClient::new(&token, &base_url);
23
24    // Fetch all accounts
25    println!("👤 Fetching connected accounts...");
26    let accounts = client.get_accounts().await?;
27
28    println!("✅ Successfully retrieved {} account(s):", accounts.len());
29    println!();
30
31    if accounts.is_empty() {
32        println!("No accounts connected.");
33    } else {
34        // Display accounts with formatting
35        for (index, account) in accounts.iter().enumerate() {
36            let account_id = &account.account_id;
37            let network = &account.network;
38            let user = &account.user;
39
40            // Build user identifier
41            let user_identifier = if let Some(full_name) = &user.full_name {
42                full_name.clone()
43            } else if let Some(username) = &user.username {
44                format!("@{}", username)
45            } else if let Some(phone) = &user.phone_number {
46                phone.clone()
47            } else {
48                user.id.clone()
49            };
50
51            println!("  {}. {} Account", index + 1, network);
52            println!("     └─ User: {}", user_identifier);
53            println!("     └─ Account ID: {}", account_id);
54            println!("     └─ User ID: {}", user.id);
55
56            // Show additional user info if available
57            if let Some(username) = &user.username {
58                println!("     └─ Username: @{}", username);
59            }
60            if let Some(phone) = &user.phone_number {
61                println!("     └─ Phone: {}", phone);
62            }
63            if let Some(email) = &user.email {
64                println!("     └─ Email: {}", email);
65            }
66            if let Some(cannot_message) = user.cannot_message {
67                if cannot_message {
68                    println!("     └─ ⚠️  Cannot initiate messages to this user");
69                }
70            }
71
72            println!();
73        }
74    }
75
76    println!("Account details (JSON):");
77    println!("{:#?}", accounts);
78
79    Ok(())
80}