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 MicrosoftGraph to GraphApi to follow Elixir naming conventions
  • Config atom changed from :microsoft_graph to :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: eventual header 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:
  • Typed error structs (ApiError, AuthError, RateLimitError)
  • Retry middleware with Retry-After header support
  • Multi-tenant support via explicit client passing