mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-12 08:52:32 +00:00
MailCraft crates/jmap's protocol core at a44a450, moved as it is with all its tests: session, requests with result references, responses, ids, addresses and templates, credentials, retry and the judgement of HTTP answers, over any HttpExchange. The mail client on top stays in MailCraft. Co-authored-by: Martin Ball <98639962+benandez@users.noreply.github.com>
38 lines
2.2 KiB
Markdown
38 lines
2.2 KiB
Markdown
# craft-jmap
|
|
|
|
The JMAP protocol core (RFC 8620) without sockets: a program brings an HTTP implementation
|
|
(`HttpExchange`), this crate describes each request and judges each answer.
|
|
|
|
- **Session**: `Client`, `fetch_session` / `read_session`, `Session`, `Account`, `CoreLimits`,
|
|
the capabilities (`CAPABILITY_CORE`, `CAPABILITY_MAIL`).
|
|
- **Requests**: `ApiRequest` of method calls with `CallId`s and `ResultReference`s
|
|
(back-references), checked against the session's limits.
|
|
- **Responses**: `ApiResponse`, `MethodResponse`, `MethodError` (RFC 8620 §3.6.2), per call.
|
|
- **Addresses**: `Address` (absolute `http(s)` URLs, RFC 3986 and the WHATWG URL Standard), the
|
|
transport rule (`https`, or plain `http` to loopback only), `session_address` for what a person
|
|
types, `AddressTemplate` (RFC 6570 level 1, the download and upload templates).
|
|
- **HTTP**: `HttpRequest`, `HttpResponse`, `judge_response` (status codes, problem details,
|
|
JSON), `RetryAfter`, `Credentials` (Basic, Bearer), `Redactor` (excerpts of what a server says,
|
|
with the credentials and addresses taken out).
|
|
- `Id`: the JMAP id alphabet.
|
|
|
|
Method calls' arguments and results are `serde_json::Value`s: what a program asks
|
|
(`Mailbox/get`, `Email/query`…) and what it makes of the answers stays in the program.
|
|
|
|
## Hostile input
|
|
|
|
Every size, count, nesting depth and string length a server sends is bounded; ids are held to
|
|
the JMAP alphabet; nothing indexes into what came over the wire, and the protocol modules are
|
|
checked with `clippy::indexing_slicing` and `clippy::arithmetic_side_effects`. Credentials and
|
|
the addresses of the session and the account never reach error text or `Debug` output.
|
|
|
|
## Origin
|
|
|
|
MailCraft `crates/jmap` (the protocol core: `address`, `classify`, `client`, `credentials`,
|
|
`discovery`, `error`, `host`, `http`, `id`, `percent`, `redact`, `request`, `response`, `retry`,
|
|
`session`, `template`) at
|
|
[a44a450](https://github.com/UCS-Care-Group/mailcraft/commit/a44a45013d1c6396229c40ab60172d1882b368d5),
|
|
by Martin Ball and the MailCraft contributors (MIT OR Apache-2.0), with all of its tests. The mail
|
|
client that sits on it (the mailbox and email reads into MailCraft's sync model, the fetch of
|
|
whole messages, the in-process test server) stays in MailCraft.
|