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.

0.1.0 - 2026-02-17

Added

  • Core clientWhatsApp.Client struct with Bearer auth, JSON/multipart encoding, and configurable timeouts
  • Automatic retries — opt-in exponential backoff with jitter, Retry-After header parsing, 429/5xx/connection error handling, and Meta is_transient awareness
  • Connection pooling — auto-sized Finch pool (max(schedulers_online, 10))
  • Error handlingWhatsApp.Error struct that parses Meta's error format (code, error_subcode, fbtrace_id, is_transient)
  • Response metadataWhatsApp.Response with named header fields (trace ID, rate limit usage, API version)
  • Telemetry:start, :stop, :exception, and :retry events under [:whatsapp, :request, ...]
  • Test helpersWhatsApp.Test with per-process HTTP stubs via NimbleOwnership for async: true tests
  • Code generationmix whatsapp.generate task that reads Meta's OpenAPI spec and generates service modules and resource structs
  • OpenAPI syncscripts/sync_openapi.sh downloads the latest spec from facebook/openapi and converts YAML to JSON
  • PaginationWhatsApp.Page with cursor-based navigation and lazy auto-paging via Stream.unfold
  • DeserializationWhatsApp.Deserializer with format-aware casting (ISO 8601 dates/times) and discriminator dispatch
  • Webhook verificationWhatsApp.Webhook with HMAC-SHA256 signature validation and subscription verification
  • WebhookPlug — optional Phoenix Plug with WhatsApp.WebhookPlug.Handler behaviour for event dispatch
  • Interactive messagesWhatsApp.Interactive builders for buttons, lists, CTA URLs, flows, location requests, and products
  • CI workflows — GitHub Actions for test matrix (Elixir 1.19-1.20, OTP 27-28), quality checks, and codegen verification
  • Spec sync workflow — periodic OpenAPI spec sync with automatic PR generation
  • Parity reportscripts/parity_report.sh for API coverage tracking