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}