# aurabase-rs
SDK officiel en Rust pour interagir avec la plateforme **[Aurabase](https://aurabase.cloud)** (Backend-as-a-Service open-source haute performance).
đ **Site officiel** : [https://aurabase.cloud](https://aurabase.cloud)
đ **Documentation** : [https://aurabase.cloud/docs](https://aurabase.cloud)
đ **GitHub** : [daylami555/aurabase](https://github.com/daylami555/aurabase)
---
## Fonctionnalités
- **Auth** : Inscription, connexion, gestion des sessions, JWT, OTP, réinitialisation de mot de passe, admin API.
- **Database** : Query builder fluide (`select`, `eq`, `filter`, `limit`, etc.), requĂȘtes SQL brutes sĂ©curisĂ©es.
- **Realtime** : Connexions WebSocket temps réel, souscription aux canaux (`presence`, `broadcast`, postgres changes).
- **Storage** : Upload, download de fichiers, gestion des buckets et signed URLs.
- **Functions** : Invocation de Serverless Functions (Deno / WASM).
- **AI** : RAG, vector embeddings et completion.
- **Notifications** : Envoi de templates d'emails et webhooks.
---
## Installation
Ajoutez la dépendance dans votre `Cargo.toml` :
```toml
[dependencies]
aurabase = { path = "../aurabase-rs" } # Ou via crates.io / git
tokio = { version = "1", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
```
---
## Démarrage rapide
L'URL **est** le projet : chaque projet est servi sur son propre sous-domaine
(`https://<slug>.aurabase.cloud`). La passerelle y résout le tenant depuis l'hÎte, puis injecte
elle-mĂȘme l'identifiant de projet dans le chemin. Le client ne transporte donc aucun
`project_id` : il ne lui faut que l'URL du projet et une clé API.
```rust
use aurabase::create_client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = create_client("https://mon-projet.aurabase.cloud", "aura_anon_xxx", None);
// 1. Authentification
let auth_res = client.auth()
.sign_in_with_password("user@example.com", "motdepasse123")
.await?;
println!("Connecté : {:?}", auth_res.user.email);
// 2. RequĂȘte Base de donnĂ©es
let rows: serde_json::Value = client.db()
.from("articles")
.select("*")
.eq("published", "true")
.limit(10)
.execute()
.await?;
println!("Résultats : {:?}", rows);
Ok(())
}
```