Changelog

View Source

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.3] - 2026-02-26

Removed

  • Remove unused exvcr dependency (tests use :meck directly)
  • Remove unused Alpa.Resource macro module (never adopted by any API module)
  • Remove empty Alpa.Application supervisor (no supervised children)
  • Remove empty config/dev.exs and config/prod.exs stubs
  • Remove dead Alpa.VCRCase test helper and ExVCR configuration

Changed

  • Replace exvcr with direct meck ~> 0.9 dependency
  • Compress logo from 1.3MB to 329KB (resized 1024→512px)
  • Add priv/plts/ and *.plt to .gitignore

[1.0.2] - 2026-02-26

Fixed

  • Fix parse_decimal/1 crash on malformed strings (use Decimal.parse instead of Decimal.new)
  • Fix WebSocket credential redaction breaking reconnection in both stream modules
  • Fix order/transfer params leaking into HTTP client opts in Trading.Orders, Crypto.Trading, Crypto.Funding
  • Fix params leak in Trading.Watchlists.create/1 and update/2
  • Fix params leak in Trading.Account.update_configurations/1
  • Fix Config.new use_paper inference to respect explicit opt over URL heuristic
  • Remove duplicated parse_datetime/1 in Clock and CryptoWallet models (import from Helpers)
  • Fix telemetry test warnings (use module function reference)

Changed

  • Test suite expanded from 420 to 685 tests, overall coverage from 52.8% to 70.6%
  • Added mock_patch/2 to test MockClient helper

[1.0.1] - 2026-01-31

Added

  • Facade delegates for Alpa.Options.Contracts (option_contracts/1, option_contract/2, option_search/2)
  • Facade delegates for Alpa.Crypto.Trading (crypto_buy/3, crypto_sell/3, crypto_place_order/1, crypto_assets/1, crypto_positions/1)
  • CI pipeline with formatting, credo --strict, and dialyzer checks
  • .dialyzer_ignore.exs for ExVCR/CaseTemplate compatibility

Fixed

  • Reduced cyclomatic complexity in Client.request and Pagination.do_fetch_all
  • Use implicit try in WebSocket modules (credo --strict compliance)
  • Alphabetized alias groups in crypto modules
  • Code formatting across all source files
  • Elixir version requirement lowered to ~> 1.14 (was ~> 1.16)
  • LICENSE link in README uses absolute URL for HexDocs compatibility
  • .gitignore pattern for hex build tarballs (*.tar)
  • Documentation consistency across README, hex docs, and wiki

Changed

  • Minimum Elixir version: 1.14 (was 1.16)

[1.0.0] - 2026-01-10

Added

  • Complete rewrite with modern Elixir 1.14+ stack
  • HTTP Client: Switched from HTTPoison to Req for better performance and DX
  • TypedStruct Models: All API responses now use typed structs with Decimal precision
  • Runtime Configuration: Proper runtime config via config/runtime.exs
  • Structured Errors: Alpa.Error struct with typed error categories

Trading API

  • Account information and configuration
  • Full order management (place, replace, cancel) with all order types
  • Bracket orders, OCO, OTO support
  • Position management with partial close support
  • Asset queries with filtering
  • Watchlist CRUD operations
  • Market clock and calendar

Market Data API (v2)

  • Historical bars with timeframe and adjustment options
  • Historical quotes (NBBO data)
  • Historical trades
  • Market snapshots (combined latest data)
  • Multi-symbol queries for all data types
  • Latest bar/quote/trade endpoints

WebSocket Streaming

Options Trading

  • Option contract search with filtering
  • Contract lookup by symbol or ID

Crypto Trading

  • Crypto asset queries
  • Crypto position management
  • Buy/sell with quantity or notional amount

Crypto Funding

  • Wallet listing
  • Transfer listing and lookup
  • Withdrawal requests

Changed

  • Minimum Elixir version: 1.14 (was 1.10)
  • API responses now return typed structs instead of raw maps
  • Configuration uses runtime.exs instead of compile-time config
  • Error handling uses structured Alpa.Error type

Removed

  • Legacy v1 bars endpoint (now uses v2 market data API)
  • Compile-time configuration via Application.get_env

For pre-1.0 changelog, see the original alpa package.