+111
stack/jmap/CLAUDE.md
+111
stack/jmap/CLAUDE.md
···+This is an OCaml implementation of the JMAP (JSON Meta Application Protocol) as defined in RFC 8620.+The library uses **type-safe GADTs** to ensure compile-time correctness of JMAP method calls. Each method has a witness type that pairs argument and response types together.+**NEVER build JSON directly in tests.** The whole point of this library is to provide a type-safe API that abstracts away JSON details.+For generic JSON methods, use the Echo witness. For typed methods, use the appropriate witness.+See `jmap/test/test_fastmail.ml` for an example of connecting to a real JMAP server (Fastmail).
+65
-395
stack/jmap/README.md
+65
-395
stack/jmap/README.md
···-A comprehensive, type-safe implementation of the JMAP (JSON Meta Application Protocol) in OCaml, covering:-**Note**: All type definitions, signatures, accessors, and constructors are complete. The library is fully usable via interfaces - only JSON parsing implementation remains.-This implementation is based on the official JMAP specifications (RFC 8620 and RFC 8621) and aims to provide a complete, type-safe, and production-ready JMAP library for OCaml.
+64
stack/jmap/TESTING_STATUS.md
+64
stack/jmap/TESTING_STATUS.md
···+**Problem**: The Requests library has a bug where making multiple HTTPS requests with the same Requests instance causes a TLS error on the second request:+**Impact**: The first HTTP request (session fetch) works fine, but any subsequent requests fail.+**Root Cause**: Issue in Requests library's connection pooling or TLS state management when reusing connections.
+2
-1
stack/jmap/jmap-client/dune
+2
-1
stack/jmap/jmap-client/dune
+129
-13
stack/jmap/jmap-client/jmap_client.ml
+129
-13
stack/jmap/jmap-client/jmap_client.ml
···+post_request : timeout:Requests.Timeout.t -> headers:Requests.Headers.t -> body:Requests.Body.t -> string -> Requests.Response.t;+post_request = (fun ~timeout ~headers ~body url -> Requests.post requests_session ~timeout ~headers ~body url);
+13
-2
stack/jmap/jmap-client/jmap_client.mli
+13
-2
stack/jmap/jmap-client/jmap_client.mli
···+env:< clock: [> float Eio.Time.clock_ty ] Eio.Resource.t; net: [> [> `Generic ] Eio.Net.ty ] Eio.Resource.t; fs: Eio.Fs.dir_ty Eio.Path.t; .. > ->
+30
-6
stack/jmap/jmap-core/jmap_invocation.ml
+30
-6
stack/jmap/jmap-core/jmap_invocation.ml
···
+66
-16
stack/jmap/jmap-core/jmap_request.ml
+66
-16
stack/jmap/jmap-core/jmap_request.ml
······
+52
-14
stack/jmap/jmap-core/jmap_response.ml
+52
-14
stack/jmap/jmap-core/jmap_response.ml
···
+80
-6
stack/jmap/jmap-core/jmap_session.ml
+80
-6
stack/jmap/jmap-core/jmap_session.ml
······
+12
-1
stack/jmap/test/dune
+12
-1
stack/jmap/test/dune
···
+114
stack/jmap/test/test_fastmail.ml
+114
stack/jmap/test/test_fastmail.ml
···
+25
stack/jmap/test/test_simple_https.ml
+25
stack/jmap/test/test_simple_https.ml
···+let resp1 = Requests.get requests ~timeout:(Requests.Timeout.create ~total:10.0 ()) "https://api.fastmail.com/jmap/session" in+let resp2 = Requests.get requests ~timeout:(Requests.Timeout.create ~total:10.0 ()) "https://api.fastmail.com/jmap/session" in