Skip to main content

supabase_client_auth/
lib.rs

1//! Supabase Auth (GoTrue) HTTP client.
2//!
3//! This crate provides an HTTP client for the Supabase GoTrue auth API.
4//! It communicates with GoTrue REST endpoints at `/auth/v1/...`.
5//!
6//! # Usage
7//!
8//! ```ignore
9//! use supabase_client_sdk::prelude::*;
10//!
11//! let client = SupabaseClient::new(config).await?;
12//! let auth = client.auth()?;
13//!
14//! // Sign up
15//! let response = auth.sign_up_with_email("user@example.com", "password123").await?;
16//!
17//! // Sign in
18//! let session = auth.sign_in_with_password_email("user@example.com", "pass").await?;
19//!
20//! // Get current user
21//! let user = auth.get_user(&session.access_token).await?;
22//!
23//! // Admin operations (requires service_role key)
24//! let admin = auth.admin();
25//! let users = admin.list_users(None, None).await?;
26//! ```
27
28pub mod admin;
29pub mod client;
30pub mod error;
31pub mod params;
32pub mod types;
33
34// Re-exports for convenient access
35pub use admin::AdminClient;
36pub use client::AuthClient;
37pub use error::{AuthError, AuthErrorCode, GoTrueErrorResponse};
38pub use params::*;
39pub use types::*;
40
41use supabase_client_core::SupabaseClient;
42
43/// Extension trait to create an [`AuthClient`] from a [`SupabaseClient`].
44///
45/// # Example
46/// ```ignore
47/// use supabase_client_sdk::prelude::*;
48/// use supabase_client_auth::SupabaseClientAuthExt;
49///
50/// let client = SupabaseClient::new(config).await?;
51/// let auth = client.auth()?;
52/// let session = auth.sign_in_with_password_email("user@example.com", "pass").await?;
53/// ```
54pub trait SupabaseClientAuthExt {
55    /// Create an [`AuthClient`] from the client's configuration.
56    ///
57    /// Requires `supabase_url` and `supabase_key` to be set in the config.
58    fn auth(&self) -> Result<AuthClient, AuthError>;
59}
60
61impl SupabaseClientAuthExt for SupabaseClient {
62    fn auth(&self) -> Result<AuthClient, AuthError> {
63        AuthClient::new(self.supabase_url(), self.api_key())
64    }
65}
66
67#[cfg(test)]
68mod tests {
69    use super::*;
70    use supabase_client_core::config::SupabaseConfig;
71
72    #[test]
73    fn test_auth_extension_trait() {
74        let config = SupabaseConfig::new("http://localhost:54321", "test-key");
75        let client = SupabaseClient::new(config).unwrap();
76        let auth = client.auth();
77        assert!(auth.is_ok());
78        let auth = auth.unwrap();
79        assert_eq!(auth.base_url().path(), "/auth/v1");
80    }
81}