Skip to main content

jmap_base_client/
lib.rs

1//! RFC 8620 base JMAP client: auth, session fetch, blob, SSE, and WebSocket.
2//!
3//! Extension-specific clients (`jmap-chat-client`, `jmap-mail-client`) depend on this crate.
4//!
5//! # Usage
6//!
7//! ```rust,no_run
8//! # use jmap_base_client::{JmapClient, auth::{DefaultTransport, BearerAuth}, client::ClientConfig};
9//! # async fn example() -> Result<(), jmap_base_client::ClientError> {
10//! let auth = BearerAuth::new("...")?;
11//! let client = JmapClient::new(
12//!     DefaultTransport,
13//!     auth,
14//!     "https://jmap.example.com",
15//!     ClientConfig::default(),
16//! )?;
17//! let session = client.fetch_session().await?;
18//! # let _ = session;
19//! # Ok(())
20//! # }
21//! ```
22
23#![forbid(unsafe_code)]
24
25pub mod auth;
26pub mod blob;
27pub mod client;
28pub mod error;
29pub mod push;
30pub mod request;
31pub mod sse;
32pub mod ws;
33
34pub use auth::{
35    AuthProvider, BasicAuth, BearerAuth, CustomCaTransport, DefaultTransport, NoneAuth,
36    TransportConfig,
37};
38pub use blob::{expand_url_template, BlobUploadResponse, DownloadBlobParams};
39pub use client::{extract_response, ClientConfig, JmapClient};
40pub use error::{ClientError, HttpError, InvalidHeaderValueError, WebSocketError};
41pub use push::StateChange;
42pub use request::{AccountInfo, JmapRequestBuilder, Session, WebSocketCapability};
43pub use sse::{parse_sse_block, SseEvent, SseFrame};
44pub use ws::{connect_ws, WsFrame, WsSession};