openlatch-provider 0.1.0

Self-service onboarding CLI + runtime daemon for OpenLatch Editors and Providers
//! Auth-related platform endpoints — `/users/me` (validate online),
//! `/api-keys/self` (server-side revoke). Used by the `login`/`logout`/`whoami`
//! command bodies in `cli/commands/auth.rs`.
//!
//! T2 keeps this thin: the auth command reaches reqwest directly for the few
//! calls it needs (the token isn't stored yet during login). T4 builds a
//! richer surface on top of [`super::client::ApiClient`].

use serde::Deserialize;

#[derive(Debug, Deserialize, Default, Clone)]
pub struct AuthMeResponse {
    #[serde(default)]
    pub email: Option<String>,
    #[serde(default)]
    pub id: Option<String>,
    #[serde(default)]
    pub user_db_id: Option<String>,
    #[serde(default)]
    pub organization_id: Option<String>,
    #[serde(default)]
    pub organization_name: Option<String>,
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn auth_me_response_default_is_all_none() {
        let r = AuthMeResponse::default();
        assert!(r.email.is_none());
        assert!(r.organization_id.is_none());
    }

    #[test]
    fn auth_me_response_parses_minimal_payload() {
        let raw = r#"{"email": "alice@example.com"}"#;
        let r: AuthMeResponse = serde_json::from_str(raw).unwrap();
        assert_eq!(r.email.as_deref(), Some("alice@example.com"));
    }
}