Skip to main content

CHANGELOG.md

# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.0] 

### Fixed

- Dialyzer: `TreasuryPrime.Resource`'s `list!/4`, `get!/5`, `create!/5`, `update!/6`, and `delete!/4` previously shared one private `bang/1` unwrap helper. Dialyzer infers a single success typing per (private, unexported) function across *all* of its call sites rather than specializing per call site — even with a generic `when value: var` spec — so sharing that helper across heterogeneous call sites (a `Page.t()`, a `struct()`, and `nil`) caused every one of those types to leak into every caller's inferred range, producing five `missing_return`/`extra_return` warnings. Fixed by inlining each function's own `case ... do {:ok, x} -> x; {:error, e} -> raise e end`, so each is analyzed independently.
- Dialyzer: added an explicit `@spec raise_missing(atom()) :: no_return()` to `TreasuryPrime.Client`'s private helper, instead of leaving its `no_return()` nature merely inferred.
- Credo: replaced four doc strings whose embedded code examples required escaped double quotes with `~s'...'` sigils.
- Credo: fixed one out-of-order `alias` group in `TreasuryPrime.Account` (`TaxDocument` was alphabetically after `Transaction`).
- `TreasuryPrime.Marqeta.JS` and `TreasuryPrime.Marqeta.UXToolkit` no longer call a fabricated `api.treasuryprime.com` endpoint. Requesting a Marqeta.js client access token or a UX Toolkit single-use token is a call to **Marqeta's own API** (`{subdomain}.marqeta.com`) using Marqeta credentials, not a Treasury Prime endpoint — both modules now reflect that and call Marqeta directly.
- `TreasuryPrime.Card` now exposes `pan`/`cvv` (nil unless requested) and `get/3` accepts `show_pan`/`show_cvv` query params to reveal them.

### Added

- Initial release.
- `TreasuryPrime.Client` / `TreasuryPrime.Config` for credential & environment configuration.
- Zero-dependency default HTTP transport (`TreasuryPrime.HTTPClient.Httpc`) built on `:httpc`/`:ssl`, plus a pluggable `TreasuryPrime.HTTPClient` behaviour for bringing your own (Req, Finch, etc.).
- Automatic retry with exponential backoff + jitter on `429`/`5xx` responses.
- `:telemetry` instrumentation around every request (optional dependency).
- Lazy pagination via `TreasuryPrime.Page` / `TreasuryPrime.Page.stream/1`.
- `TreasuryPrime.Idempotency` key generation helper.
- `TreasuryPrime.WebhookEvent` and `TreasuryPrime.WebhookSignature` for receiving and validating webhooks.
- Full resource coverage: accounts, ACH, wires, book transfers, network transfers, FedNow, checks, check deposit, counterparties, incoming ACH/wire, invoice account numbers, manual holds, Green Dot cash loads, deposit sweeps, cards, card products, card events, card auth loop endpoints, digital wallet tokens, Marqeta JS / UX Toolkit, account applications, business/person/additional-person applications, deposits, KYC/KYC products, businesses, persons, account products, account number reservations, account locks, reserve accounts, statement configs, tax documents, transactions, documents, files, routing numbers, webhooks, and sandbox simulations.