commits
- Replace Arg with Cmdliner for argument parsing
- Add comprehensive manual page with examples and documentation
- Update command-line flags to use modern double-dash format (--flag)
- Improve code structure to handle parameters without global references
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added JMAP email submission support to the library and created a fastmail-send utility
that accepts recipients, subject line as CLI arguments and reads the message body from
stdin. Fixed JMAP protocol message format to ensure proper email creation and submission.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added string_of_error and pp_error functions to the Jmap.Api module
to provide a consistent, reusable way of formatting error messages.
This centralizes error formatting logic and reduces duplicated code
in client applications.
Updated the fastmail_list binary to use these functions, resulting
in cleaner, more maintainable code.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Mark high-level API usage task as complete and add more potential
future work items to the roadmap.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace the manual construction of JMAP requests with proper higher-level
library calls from Jmap_mail. This improves code clarity and ensures that
the example demonstrates the recommended way to use the library.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Mark README task as complete and add suggestions for potential future work.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This adds a comprehensive README.md that describes the library, including:
- Overview of features
- Installation instructions
- Quick start example code
- Documentation information
- References to specifications
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This adds an OCamldoc-format tutorial in index.mld with cross-references
to the library modules, explaining how to use the JMAP OCaml client.
It also adds a corresponding executable example in bin/tutorial_examples.ml
that demonstrates authentication, mailbox listing, and email retrieval.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add detailed documentation for all types and functions in jmap.mli
- Add detailed documentation for all types and functions in jmap_mail.mli
- Include proper @see references with URLs to RFC sections
- Include field-level documentation for record types
- Follow OCamldoc standards with proper parameter documentation
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added email address matching utility with support for wildcards
- Added sender filtering functionality to the fastmail-list command
- Added new -from command line option to filter messages by sender address
- Improved output formatting to show applied filters
- Updated AGENT.md to mark task #12 as completed and add task #13
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created a new ResultReference module to simplify creating and using result references as described in RFC8620 Section 3.7
- Added helper functions to create common reference patterns
- Implemented demo functionality in fastmail_list to show how to chain multiple JMAP requests efficiently
- Added a new -demo-refs command line option to demonstrate this functionality
- Updated AGENT.md to mark task 11 as completed
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added functions to format message keywords and flag colors in a human-readable way
- Updated fastmail_list to use these functions for better display of labels
- Enhanced flag_color_test with a demo of the formatting functionality
- Updated AGENT.md to mark task as completed
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This implements task 9 from AGENT.md by adding:
- Flag color support with RGB bit pattern encoding (Red, Orange, Yellow, Green, Blue, Purple, Gray)
- Standard message keywords as defined in draft-ietf-mailmaint-messageflag-mailboxattribute-02
- Mailbox attribute names (Snoozed, Scheduled, Memos)
- Helper functions to work with these types and convert between typed and string representations
- Utility functions to check, add, and search for messages with specific keywords
Added a test program (flag_color_test) to demonstrate the new functionality.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove nested singleton types (Mail, Submission, VacationResponse)
- Update all references to use direct variant constructors
- Fix interface file to match implementation
- Simplify string conversion functions
- Make API more consistent with Jmap.Capability module
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add proper OCaml Logs-based logging system with configurable levels
- Redact sensitive API tokens for security in logs
- Add -unread flag to filter and only show unread messages
- Add -labels flag to display message keywords/labels
- Add -debug flag to control verbosity level
- Improve CLI help and usage instructions
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create Capability module in Jmap with typed handling of core URIs
- Create Capability module in Jmap_mail with typed handling of mail URIs
- Replace hardcoded URI strings with typed versions in client code
- Improves type safety by ensuring URIs are correctly managed
- Provides parsing/stringifying functions for interoperability
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix typo in URI from "sessio" to "session"
- Modify HTTP client to support both GET and POST methods as required by API
- Improve JSON parsing to handle null values in API responses
- Add detailed debug logging to help troubleshoot API interactions
- Update mailbox and email parsers to be more robust with server responses
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added detailed HTTP debugging to print request/response details
- Improved user guidance for Fastmail API token format
- Updated error messages with instructions for getting valid tokens
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added support for Fastmail API token authentication via Bearer tokens
- Implemented login_with_token function for token-based auth
- Improved authentication header logic to support both Basic and Bearer auth
- Created fastmail_list example binary using token-based authentication
- Updated AGENT.md to mark completed tasks
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add login function to authenticate with JMAP server
- Add functions to retrieve and query mailboxes
- Add functions to retrieve email messages in mailboxes
- Make all functions follow RFC8621 JMAP Mail spec
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit implements the JMAP Mail extension as specified in RFC8621, including:
- Mailbox, Thread, and Email type definitions
- Email submission and Identity types
- Vacation response handling
- Helper functions for type conversion
- Structure and API patterns matching the core JMAP module
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implemented a comprehensive JMAP API client with the following features:
- HTTP request/response handling using cohttp-lwt-unix
- Session object fetching and parsing
- Core request serialization and response parsing
- Binary blob upload and download functionality
- Proper error handling with detailed error types
The module follows RFC8620 specifications for all API interactions,
including authentication, content handling, and URL template processing.
Note: Implementation currently has a compilation issue with ezjsonm package
that needs to be resolved.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements comprehensive OCaml type definitions for the JMAP protocol:
- Basic data types (id, int_t, unsigned_int, date, utc_date)
- Core objects (error, set_error, invocation, result_reference)
- Filter and sorting mechanisms
- Account and session management
- Push notification structures
- Request/response structures
- Standard method argument and response types
All types are documented with corresponding RFC section references.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace Arg with Cmdliner for argument parsing
- Add comprehensive manual page with examples and documentation
- Update command-line flags to use modern double-dash format (--flag)
- Improve code structure to handle parameters without global references
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added JMAP email submission support to the library and created a fastmail-send utility
that accepts recipients, subject line as CLI arguments and reads the message body from
stdin. Fixed JMAP protocol message format to ensure proper email creation and submission.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added string_of_error and pp_error functions to the Jmap.Api module
to provide a consistent, reusable way of formatting error messages.
This centralizes error formatting logic and reduces duplicated code
in client applications.
Updated the fastmail_list binary to use these functions, resulting
in cleaner, more maintainable code.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace the manual construction of JMAP requests with proper higher-level
library calls from Jmap_mail. This improves code clarity and ensures that
the example demonstrates the recommended way to use the library.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This adds a comprehensive README.md that describes the library, including:
- Overview of features
- Installation instructions
- Quick start example code
- Documentation information
- References to specifications
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This adds an OCamldoc-format tutorial in index.mld with cross-references
to the library modules, explaining how to use the JMAP OCaml client.
It also adds a corresponding executable example in bin/tutorial_examples.ml
that demonstrates authentication, mailbox listing, and email retrieval.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add detailed documentation for all types and functions in jmap.mli
- Add detailed documentation for all types and functions in jmap_mail.mli
- Include proper @see references with URLs to RFC sections
- Include field-level documentation for record types
- Follow OCamldoc standards with proper parameter documentation
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added email address matching utility with support for wildcards
- Added sender filtering functionality to the fastmail-list command
- Added new -from command line option to filter messages by sender address
- Improved output formatting to show applied filters
- Updated AGENT.md to mark task #12 as completed and add task #13
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created a new ResultReference module to simplify creating and using result references as described in RFC8620 Section 3.7
- Added helper functions to create common reference patterns
- Implemented demo functionality in fastmail_list to show how to chain multiple JMAP requests efficiently
- Added a new -demo-refs command line option to demonstrate this functionality
- Updated AGENT.md to mark task 11 as completed
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added functions to format message keywords and flag colors in a human-readable way
- Updated fastmail_list to use these functions for better display of labels
- Enhanced flag_color_test with a demo of the formatting functionality
- Updated AGENT.md to mark task as completed
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This implements task 9 from AGENT.md by adding:
- Flag color support with RGB bit pattern encoding (Red, Orange, Yellow, Green, Blue, Purple, Gray)
- Standard message keywords as defined in draft-ietf-mailmaint-messageflag-mailboxattribute-02
- Mailbox attribute names (Snoozed, Scheduled, Memos)
- Helper functions to work with these types and convert between typed and string representations
- Utility functions to check, add, and search for messages with specific keywords
Added a test program (flag_color_test) to demonstrate the new functionality.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove nested singleton types (Mail, Submission, VacationResponse)
- Update all references to use direct variant constructors
- Fix interface file to match implementation
- Simplify string conversion functions
- Make API more consistent with Jmap.Capability module
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add proper OCaml Logs-based logging system with configurable levels
- Redact sensitive API tokens for security in logs
- Add -unread flag to filter and only show unread messages
- Add -labels flag to display message keywords/labels
- Add -debug flag to control verbosity level
- Improve CLI help and usage instructions
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create Capability module in Jmap with typed handling of core URIs
- Create Capability module in Jmap_mail with typed handling of mail URIs
- Replace hardcoded URI strings with typed versions in client code
- Improves type safety by ensuring URIs are correctly managed
- Provides parsing/stringifying functions for interoperability
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix typo in URI from "sessio" to "session"
- Modify HTTP client to support both GET and POST methods as required by API
- Improve JSON parsing to handle null values in API responses
- Add detailed debug logging to help troubleshoot API interactions
- Update mailbox and email parsers to be more robust with server responses
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added support for Fastmail API token authentication via Bearer tokens
- Implemented login_with_token function for token-based auth
- Improved authentication header logic to support both Basic and Bearer auth
- Created fastmail_list example binary using token-based authentication
- Updated AGENT.md to mark completed tasks
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add login function to authenticate with JMAP server
- Add functions to retrieve and query mailboxes
- Add functions to retrieve email messages in mailboxes
- Make all functions follow RFC8621 JMAP Mail spec
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit implements the JMAP Mail extension as specified in RFC8621, including:
- Mailbox, Thread, and Email type definitions
- Email submission and Identity types
- Vacation response handling
- Helper functions for type conversion
- Structure and API patterns matching the core JMAP module
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implemented a comprehensive JMAP API client with the following features:
- HTTP request/response handling using cohttp-lwt-unix
- Session object fetching and parsing
- Core request serialization and response parsing
- Binary blob upload and download functionality
- Proper error handling with detailed error types
The module follows RFC8620 specifications for all API interactions,
including authentication, content handling, and URL template processing.
Note: Implementation currently has a compilation issue with ezjsonm package
that needs to be resolved.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements comprehensive OCaml type definitions for the JMAP protocol:
- Basic data types (id, int_t, unsigned_int, date, utc_date)
- Core objects (error, set_error, invocation, result_reference)
- Filter and sorting mechanisms
- Account and session management
- Push notification structures
- Request/response structures
- Standard method argument and response types
All types are documented with corresponding RFC section references.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>