All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.0-rc.1] - 2026-03-05
Changed
- Package renamed to
:keen_microsoft_graphapi(Hex organization:keenmate) - Module prefix renamed from
MicrosoftGraphtoGraphApito follow Elixir naming conventions - Config atom changed from
:microsoft_graphto:keen_microsoft_graphapi
Added
- Files (OneDrive) — 14 new endpoints (9 → 23 total):
list_drives,get_special_folder,search,create_folder,update_item,delete_item,copy_item,list_permissions,create_sharing_link,add_permission,delete_permission,list_versions,list_thumbnails,get_shared_item - Groups — 9 new endpoints (17 → 26 total):
list_transitive_member_of,get_member_objects,get_member_groups,check_member_objects,check_member_groups,list_app_role_assignments,add_app_role_assignment,remove_app_role_assignment,list_permission_grants - Users — complete endpoint coverage (30 endpoints) with CRUD, manager hierarchy, memberships, app roles, licenses, authentication methods, photos, and delta queries
- Schema-aware OData filter builder with snake_case field names
- Delegated auth flow (OAuth authorization code)
- Client-request-id header support for request correlation
GRAPH_API_COVERAGE.md— full endpoint coverage map (101 endpoints implemented)
[0.2.0] - 2026-02-25
Added
- Graph Explorer — interactive Phoenix LiveView UI in the demo app
- 3-column layout: endpoint navigator, parameter builder, result display
- Covers all 37 library endpoints across Users, Groups, Mail, Calendar, and Files
- Endpoint descriptions and JSON body templates pre-filled for every mutation endpoint
- OData query builder with $select, $filter, $top, $skip, $orderby, $expand, $count, $search
- Visual (table/cards) and raw JSON result views with @odata metadata banner
- Pagination — "Load Next Page" button follows
@odata.nextLink, appends results - Advanced Query toggle — single checkbox enables both
ConsistencyLevel: eventualheader and$count=true(required for $search, $count, certain $filter/$orderby) - Authentication fields in the UI — Tenant ID, Client ID, Client Secret, and Access Token
- Credentials pre-populated from environment variables when available
- Works without env vars configured — enter credentials directly in the browser
- API version toggle (v1.0 / beta)
- Async execution with loading state via
start_async
- Phoenix LiveView with no JS build pipeline — CSS embedded inline, LiveView JS served from deps
- Bandit as the HTTP server for the demo app
[0.1.0] - 2024-01-15
Added
- Initial release
- Client credentials (app-only) authentication with Entra ID
- Token caching with proactive refresh via GenServer
- OData query builder (
$select,$filter,$expand,$top,$skip,$orderby,$count,$search) - Stream-based pagination following
@odata.nextLink - Resource modules:
GraphApi.Users- users CRUD + directReports, memberOfGraphApi.Groups- groups CRUD + members managementGraphApi.Mail- messages, sendMail, mailFoldersGraphApi.Calendar- events, calendarView, calendarsGraphApi.Files- drives, items, upload/download
- Typed error structs (
ApiError,AuthError,RateLimitError) - Retry middleware with
Retry-Afterheader support - Multi-tenant support via explicit client passing