marketsurge-agent 0.2.0

Unofficial agent-oriented CLI for MarketSurge data
//! Browser cookie authentication for MarketSurge.

use marketsurge_client::{Client, ClientError};

/// Build a MarketSurge client from browser cookies and a JWT exchange.
pub async fn make_client() -> Result<Client, i32> {
    match Client::from_browser().await {
        Ok(client) => Ok(client),
        Err(err) => {
            if err.is_auth_error() {
                eprintln!("auth error: {err}");
                Err(2)
            } else {
                eprintln!("client error: {err}");
                Err(1)
            }
        }
    }
}

/// Convert API errors into CLI exit codes and messages.
pub fn handle_api_error(err: ClientError) -> i32 {
    if err.is_auth_error() {
        eprintln!("auth error: {err}");
        2
    } else {
        eprintln!("API error: {err}");
        1
    }
}

#[cfg(test)]
mod tests {
    use super::handle_api_error;
    use marketsurge_client::ClientError;

    fn status_error(status: u16) -> ClientError {
        ClientError::Status {
            status,
            body: String::new(),
        }
    }

    #[test]
    fn test_handle_api_error_auth_returns_2() {
        assert_eq!(handle_api_error(status_error(401)), 2);
    }

    #[test]
    fn test_handle_api_error_other_returns_1() {
        assert_eq!(handle_api_error(status_error(500)), 1);
    }
}