Skip to main content

supabase_client_sdk/
lib.rs

1//! # supabase-client-sdk
2//!
3//! A Rust client for [Supabase](https://supabase.com/) with a fluent, Supabase JS-like API.
4//! Uses the **PostgREST REST API by default** — no database connection needed. Opt into
5//! direct PostgreSQL access via [sqlx](https://github.com/launchbadge/sqlx) with the
6//! `direct-sql` feature flag.
7//!
8//! This is the main facade crate that re-exports all sub-crates behind feature flags.
9//!
10//! ## Quick Start
11//!
12//! ```rust,no_run
13//! use supabase_client_sdk::prelude::*;
14//!
15//! #[tokio::main]
16//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
17//!     let config = SupabaseConfig::new("https://your-project.supabase.co", "your-anon-key");
18//!     let client = SupabaseClient::new(config)?;
19//!
20//!     let response = client.from("cities").select("*").execute().await;
21//!     for row in response.into_result()? {
22//!         println!("{}", row.get_as::<String>("name").unwrap());
23//!     }
24//!     Ok(())
25//! }
26//! ```
27//!
28//! ## Feature Flags
29//!
30//! | Feature | Default | Description |
31//! |---------|---------|-------------|
32//! | `query` | Yes | Query builder (select, insert, update, delete, upsert, rpc) |
33//! | `derive` | Yes | `#[derive(Table)]` proc macro |
34//! | `auth` | No | GoTrue authentication client |
35//! | `realtime` | No | WebSocket realtime subscriptions |
36//! | `storage` | No | Object storage client |
37//! | `functions` | No | Edge Functions client |
38//! | `graphql` | No | GraphQL client (pg_graphql) |
39//! | `direct-sql` | No | Direct PostgreSQL via sqlx (bypasses PostgREST) |
40//! | `full` | No | All features enabled |
41
42// Re-export core (always available)
43pub use supabase_client_core::*;
44
45// Re-export query builder (feature-gated)
46#[cfg(feature = "query")]
47pub use supabase_client_query::*;
48
49// Re-export derive macros (feature-gated)
50#[cfg(feature = "derive")]
51pub use supabase_client_derive::*;
52
53// Re-export auth crate
54#[cfg(feature = "auth")]
55pub use supabase_client_auth;
56
57#[cfg(feature = "realtime")]
58pub use supabase_client_realtime;
59
60#[cfg(feature = "storage")]
61pub use supabase_client_storage;
62
63#[cfg(feature = "functions")]
64pub use supabase_client_functions;
65
66#[cfg(feature = "graphql")]
67pub use supabase_client_graphql;
68
69/// Prelude module for convenient imports.
70///
71/// ```ignore
72/// use supabase_client_sdk::prelude::*;
73/// ```
74pub mod prelude {
75    pub use supabase_client_core::{
76        Row, SupabaseClient, SupabaseConfig, SupabaseError, SupabaseResponse, SupabaseResult,
77    };
78    #[cfg(feature = "direct-sql")]
79    pub use supabase_client_core::PoolConfig;
80    pub use supabase_client_core::row;
81
82    #[cfg(feature = "query")]
83    pub use supabase_client_query::{
84        Filterable, Modifiable, OrderDirection, IsValue, TextSearchType,
85        SupabaseClientQueryExt, Table,
86        ExplainOptions, ExplainFormat, CountOption,
87        CsvSelectBuilder, GeoJsonSelectBuilder,
88    };
89
90    #[cfg(feature = "derive")]
91    pub use supabase_client_derive::Table;
92
93    #[cfg(feature = "auth")]
94    pub use supabase_client_auth::{
95        AuthClient, AuthError, AuthResponse, Session, User,
96        SupabaseClientAuthExt,
97        // Session state management
98        AuthChangeEvent, AuthStateChange, AuthSubscription, AutoRefreshConfig,
99        // MFA types
100        MfaEnrollParams, MfaVerifyParams, MfaChallengeParams,
101        MfaEnrollResponse, MfaTotpInfo, MfaChallengeResponse, MfaUnenrollResponse,
102        MfaListFactorsResponse, AuthenticatorAssuranceLevelInfo,
103        AuthenticatorAssuranceLevel, AmrEntry, FactorType, FactorStatus,
104        // SSO
105        SsoSignInParams, SsoSignInResponse,
106        // ID Token
107        SignInWithIdTokenParams,
108        // Identity linking
109        LinkIdentityResponse,
110        // Resend
111        ResendParams, ResendType,
112        // OAuth Server types
113        OAuthClient, OAuthClientType, OAuthClientGrantType, OAuthClientResponseType,
114        OAuthClientRegistrationType, OAuthClientListResponse,
115        OAuthAuthorizationClient, OAuthAuthorizationUser, OAuthAuthorizationDetails,
116        OAuthAuthorizationDetailsResponse, OAuthRedirect, OAuthGrant,
117        CreateOAuthClientParams, UpdateOAuthClientParams,
118        // OAuth Client-Side Flow types
119        PkceCodeVerifier, PkceCodeChallenge, PkcePair,
120        OAuthTokenResponse, OpenIdConfiguration, JwksResponse, Jwk,
121        OAuthAuthorizeUrlParams, OAuthTokenExchangeParams,
122        // Web3 auth
123        Web3Chain, Web3SignInParams,
124    };
125
126    #[cfg(feature = "realtime")]
127    pub use supabase_client_realtime::{
128        RealtimeClient, RealtimeChannel, RealtimeConfig, RealtimeError,
129        ChannelBuilder, SupabaseClientRealtimeExt,
130        PostgresChangesEvent, PostgresChangesFilter, PostgresChangePayload,
131        SubscriptionStatus, ChannelState, PresenceState, PresenceMeta,
132    };
133
134    #[cfg(feature = "storage")]
135    pub use supabase_client_storage::{
136        StorageClient, StorageBucketApi, StorageError,
137        Bucket, BucketOptions, FileObject, FileOptions,
138        SearchOptions, SortOrder, SignedUrlResponse,
139        SupabaseClientStorageExt,
140        // Phase 7: Storage enhancements
141        TransformOptions, ResizeMode, ImageFormat, FileInfo,
142    };
143
144    #[cfg(feature = "functions")]
145    pub use supabase_client_functions::{
146        FunctionsClient, FunctionsError, FunctionResponse,
147        InvokeOptions, InvokeBody, HttpMethod, FunctionRegion,
148        SupabaseClientFunctionsExt,
149    };
150
151    #[cfg(feature = "graphql")]
152    pub use supabase_client_graphql::{
153        GraphqlClient, GraphqlError, GraphqlResponse,
154        QueryBuilder as GqlQueryBuilder, MutationBuilder, MutationKind as GqlMutationKind,
155        Connection, Edge, PageInfo, MutationResult,
156        GqlFilter, FilterOp, IsValue as GqlIsValue, OrderByDirection,
157        SupabaseClientGraphqlExt,
158    };
159}