#[non_exhaustive]pub struct Session {
pub capabilities: HashMap<String, Value>,
pub accounts: HashMap<String, AccountInfo>,
pub primary_accounts: HashMap<String, String>,
pub username: String,
pub api_url: String,
pub download_url: String,
pub upload_url: String,
pub event_source_url: String,
pub state: State,
pub extra: Map<String, Value>,
}Expand description
JMAP Session object returned by GET /.well-known/jmap (RFC 8620 §2).
Contains only the base RFC 8620 fields. Extension-specific fields
(e.g. JMAP Chat ownerUserId) are surfaced by extension crates that
parse the capabilities and accounts maps.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.capabilities: HashMap<String, Value>Map of capability URI → capability object (RFC 8620 §2).
Values are kept as raw JSON so callers can extract extension-specific capability objects without this crate knowing their schema.
accounts: HashMap<String, AccountInfo>Map of account ID → AccountInfo (RFC 8620 §2).
primary_accounts: HashMap<String, String>Map of capability URI → primary account ID (RFC 8620 §2).
username: StringUsername associated with the current credentials (RFC 8620 §2).
api_url: StringURL for JMAP API POST requests (RFC 8620 §2).
download_url: StringURL template for blob downloads (RFC 8620 §2).
URI Template (level 1) containing variables accountId, blobId,
type, and name.
upload_url: StringURL template for blob uploads (RFC 8620 §2).
URI Template (level 1) containing variable accountId.
event_source_url: StringURL template for SSE push event stream (RFC 8620 §2, §7.3).
URI Template (level 1) containing variables types, closeafter,
and ping.
state: StateOpaque session state token (RFC 8620 §2).
Changes whenever any session property changes. Returned in every API
response as sessionState; clients compare to detect staleness.
extra: Map<String, Value>Catch-all for vendor / site / private extension fields not covered by the typed fields above. Preserves unknown fields across deserialize/serialize round-trip per workspace extras-preservation policy (see workspace AGENTS.md).
Implementations§
Source§impl Session
impl Session
Sourcepub fn primary_account_id(&self, capability: &str) -> Option<&str>
pub fn primary_account_id(&self, capability: &str) -> Option<&str>
Returns the primary account ID for the given capability URI, if set.
Example: session.primary_account_id("urn:ietf:params:jmap:mail")
Sourcepub fn websocket_capability(
&self,
) -> Result<Option<WebSocketCapability>, ClientError>
pub fn websocket_capability( &self, ) -> Result<Option<WebSocketCapability>, ClientError>
Returns the parsed WebSocketCapability for the JMAP WebSocket
transport, if advertised (RFC 8887).
Ok(None)— server does not advertise JMAP WebSocket support.Ok(Some(...))— WebSocket is supported; useresult.urlto connect.Err— capability key is present but the value is malformed.
Sourcepub fn supports_cid(&self) -> bool
pub fn supports_cid(&self) -> bool
Returns true if the server advertises the JMAP Blob Content
Identifiers extension (draft-atwood-jmap-cid-00).
Checks for presence of capabilities["urn:ietf:params:jmap:cid"].
The capability value object is empty per the draft (§2: “no
capability fields defined at this time”), so the presence of the
key is sufficient — no value-shape check is required.
When true, the server commits to including a sha256 field
(the 64-character lowercase-hex SHA-256 digest of the uploaded
content) on Blob upload responses, and on FileNode objects when
the JMAP FileNode extension is also supported. See
jmap_cid_types::Sha256 for the typed wire shape.
Mirrors the supports_* capability-probe pattern established by
ChatSessionExt::supports_quotas and
ChatSessionExt::supports_refplus in jmap-chat-client.
Trait Implementations§
Source§impl Debug for Session
Manual Debug impl that redacts privacy-sensitive fields (bd:JMAP-sc1b.99).
impl Debug for Session
Manual Debug impl that redacts privacy-sensitive fields (bd:JMAP-sc1b.99).
Session.username is the authenticated user’s identifier — typically a
full email address, which is PII under GDPR/CCPA. Session.state is the
opaque RFC 8620 §2 session-state token; it is not an auth credential, but
it uniquely identifies the client’s session and is the same shape of leak
as logging a session cookie. Both are replaced with "[REDACTED]" /
"[opaque]" in the Debug output.
All other URL/map fields are surfaced — they are deployment metadata and
not credential-grade. AccountInfo.name is redacted by AccountInfo’s
own manual Debug impl, so the accounts map below does not leak
owner emails transitively (bd:JMAP-sc1b.104).