seher-sdk 0.0.32

Seher SDK: agent resolution, rate-limit checks, and provider clients
Documentation
use seher::{BrowserDetector, CookieReader};

#[tokio::main(flavor = "current_thread")]
async fn main() {
    let detector = BrowserDetector::new();
    let browsers = detector.detect_browsers();

    for browser in &browsers {
        if !browser.is_chromium_based() {
            continue;
        }
        for prof in detector.list_profiles(*browser) {
            if let Ok(cookies) = CookieReader::read_cookies(&prof, "chatgpt.com") {
                let has_session = cookies
                    .iter()
                    .any(|c| c.name.starts_with("__Secure-next-auth.session-token"));

                if !has_session {
                    continue;
                }

                println!(
                    "Using {} - {} ({} cookies)",
                    browser.name(),
                    prof.name,
                    cookies.len(),
                );

                match seher::codex::CodexClient::fetch_usage(&cookies).await {
                    Ok(usage) => {
                        println!("\nSuccess! Codex usage:");
                        println!("  plan_type: {}", usage.plan_type);
                        println!("  rate_limit limited: {}", usage.rate_limit.is_limited());
                        println!(
                            "  rate_limit reset_time: {:?}",
                            usage.rate_limit.next_reset_time()
                        );
                        println!(
                            "  code_review limited: {}",
                            usage
                                .code_review_rate_limit
                                .as_ref()
                                .is_some_and(seher::CodexRateLimit::is_limited)
                        );
                        return;
                    }
                    Err(e) => {
                        println!("\nFailed to fetch Codex usage: {e}");
                    }
                }
            }
        }
    }

    println!("No chatgpt.com session with __Secure-next-auth.session-token found");
}