Skip to main content

CHANGELOG.md

# Changelog

## [0.2.1] — 2026-06-05

### Added

- Support for Elixir 1.20.0 and OTP 29
- CI: quality checks (format, credo, dialyzer) now run inside the test matrix on every OTP/Elixir combination

### Fixed

- Elixir 1.20 compatibility: verified clean compilation, tests, credo, and dialyzer on OTP 29

### Changed

- Updated `ex_doc` 0.40.2 → 0.40.3 (dev-only)
- Test coverage: 61.63% → 81.98% with new tests for `Url`, `Cert`, and `HttpClient` modules

## [0.2.0] — 2026-05-16

### Added

- `ExAwsSnsVerifier.Plug` — a Plug behaviour module for verifying SNS messages in Plug/Phoenix pipelines
- `{:plug, "~> 1.0"}` runtime dependency

## [0.1.0] — 2026-05-13

Initial release.

### Added

- RSA-SHA256 signature verification for `Notification`, `SubscriptionConfirmation`, and `UnsubscribeConfirmation` messages
- Canonical string construction per AWS SNS specification
- URL hardening: HTTPS enforcement, host whitelist (`sns.<region>.amazonaws.com`), no credentials in URL, `.pem` extension for certs
- Certificate fetching via `:httpc` with automatic caching in `:persistent_term` (24h TTL)
- Configurable timestamp window for replay protection
- Topic ARN allowlist for origin restriction
- Pluggable HTTP client via `ExAwsSnsVerifier.Cert.HttpClientBehaviour`
- `ExAwsSnsVerifier.Plug` for Phoenix/Plug integration (module stub)
- Comprehensive test suite with locally generated RSA keypairs
- CI workflow with OTP 26–29 × Elixir 1.16–1.20 matrix
- Full credo and dialyzer compliance