|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project will be documented in this file. |
| 4 | + |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), |
| 6 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | + |
| 8 | +## [1.4.0] - 2026-05-05 |
| 9 | + |
| 10 | +### Changed |
| 11 | + |
| 12 | +- Brand rename across all PascalCase types: the main client and its sibling |
| 13 | + types now spell the brand as `AudD`. `AudD`, `AudDBuilder`, `AudDError`, |
| 14 | + `AudDEvent`. The crate name `audd` (lowercase) and the `AUDD_API_TOKEN` |
| 15 | + environment variable are unchanged. |
| 16 | + |
| 17 | +## [1.3.0] - 2026-05-05 |
| 18 | + |
| 19 | +Coordinated v1.3.0 stable release across the audd-sdks family. No breaking |
| 20 | +changes; the version bump signals API stability across all nine SDKs. |
| 21 | + |
| 22 | +The full v0.3.0 polish — env-var auto-pickup, streaming/preview helpers |
| 23 | +with metadata fallback, `onEvent` inspection hook, thread-safe token |
| 24 | +rotation, plus per-language work (JPMS module-info, Kotlin `Flow<LongpollEvent>`, |
| 25 | +Swift `Sendable` + DocC, .NET AOT/source-gen + `IServiceCollection`, Rust |
| 26 | +TLS feature flags + `Serialize`, PHP PSR-3 logger, Python `__repr__` + |
| 27 | +`pretty_print()`, Go `slog` example) is now the v1.3.0 baseline. |
| 28 | + |
| 29 | +## [0.3.0] - 2026-05-05 |
| 30 | + |
| 31 | +### Added |
| 32 | + |
| 33 | +- TLS-backend feature flags. `default = ["rustls-tls"]` keeps the v0.2 behavior |
| 34 | + (pure-Rust TLS + Mozilla CA bundle) intact for existing users; opt into |
| 35 | + `native-tls` (system OpenSSL — corp CA bundles, OpenSSL FIPS, etc.) or |
| 36 | + `vendored-openssl` (static OpenSSL build, no `libssl-dev` required) by |
| 37 | + setting `default-features = false` and naming the backend explicitly. See |
| 38 | + the README's "Choosing a TLS backend" section. |
| 39 | +- `Serialize` derive on every public model — `RecognitionResult`, |
| 40 | + `AppleMusicMetadata`, `SpotifyMetadata`, `DeezerMetadata`, `NapsterMetadata`, |
| 41 | + `MusicBrainzEntry`, `EnterpriseMatch`, `EnterpriseChunkResult`, `Stream`, |
| 42 | + `StreamCallbackPayload`, `StreamCallbackResult`, `StreamCallbackResultEntry`, |
| 43 | + `StreamCallbackNotification`, `LyricsResult`, `RecognitionMatch`, |
| 44 | + `StreamingProvider`, `AudDEvent`, `EventKind`. Round-trip recognition |
| 45 | + results into your own logs / queues / databases without a manual mapper. |
| 46 | + `RecognitionMatch` serializes as a serde-tagged enum |
| 47 | + (`{"kind": "public" | "custom", "result": ...}`); `StreamingProvider` / |
| 48 | + `EventKind` serialize to their wire-name strings. |
| 49 | + |
| 50 | +### Changed |
| 51 | + |
| 52 | +- `reqwest` is now pulled with `default-features = false` plus the |
| 53 | + SDK-managed feature gate. The `multipart` / `json` / `stream` feature set |
| 54 | + is unchanged from v0.2. |
| 55 | + |
| 56 | +## [0.2.0] - 2026-05-05 |
| 57 | + |
| 58 | +### Added |
| 59 | + |
| 60 | +- `AUDD_API_TOKEN` environment-variable fallback in `AudD::new` / |
| 61 | + `AudD::builder().build()` and a new `AudD::from_env()` constructor. When the |
| 62 | + token argument is empty and `AUDD_API_TOKEN` is unset, `build()` returns |
| 63 | + `AudDError::Configuration` pointing at <https://dashboard.audd.io>. |
| 64 | +- `RecognitionResult::streaming_url(StreamingProvider)`, |
| 65 | + `RecognitionResult::streaming_urls()`, `RecognitionResult::preview_url()`, |
| 66 | + `EnterpriseMatch::streaming_url`, and `EnterpriseMatch::streaming_urls` — |
| 67 | + resolution prefers a direct URL from the relevant metadata block, falling |
| 68 | + back to the `lis.tn` `?<provider>` redirect helper. New `StreamingProvider` |
| 69 | + enum (`Spotify` / `AppleMusic` / `Deezer` / `Napster` / `YouTube`). |
| 70 | +- `AudD::set_api_token(&str)` thread-safe rotation backed by `Arc<RwLock>` |
| 71 | + on both the standard and enterprise transports. Rejects empty tokens with |
| 72 | + `AudDError::Configuration`. `AudD::api_token()` now returns `String`. |
| 73 | +- `AudD::on_event(...)` inspection hook with `AudDEvent` (`kind`, `method`, |
| 74 | + `url`, `request_id`, `http_status`, `elapsed`, `error_code`, `extras`). |
| 75 | + Hook panics caught by `std::panic::catch_unwind`. `api_token` and request / |
| 76 | + response bodies are never included. |
| 77 | + |
| 78 | +### Changed |
| 79 | + |
| 80 | +- New `AudDError::Configuration` variant for construction-time misuse. |
| 81 | + |
| 82 | +### Removed |
| 83 | + |
| 84 | +- Stale `advanced_lyrics` example target reference (per directive: no |
| 85 | + ready-made find-lyrics example). |
| 86 | + |
| 87 | +## [0.1.0] - 2026-05-04 |
| 88 | + |
| 89 | +### Added |
| 90 | + |
| 91 | +- First public release of the official Rust SDK for the AudD music recognition API. |
| 92 | +- Async-only client (`AudD`) backed by `reqwest` + `tokio`. |
| 93 | +- `recognize` (URL / path / bytes / async reader) returning `Option<RecognitionResult>`. |
| 94 | +- `recognize_enterprise` returning `Vec<EnterpriseMatch>` with hour-long timeouts. |
| 95 | +- `streams.*` namespace covering set/get callback URL, add/list/set_url/delete, longpoll |
| 96 | + with default-on preflight (and `skip_callback_check` opt-out), `derive_longpoll_category`, |
| 97 | + and `parse_callback`. |
| 98 | +- `custom_catalog.add` with override-message handling for code 904. |
| 99 | +- `advanced.find_lyrics` and `advanced.raw_request` escape hatch. |
| 100 | +- Tokenless `LongpollConsumer` (top-level export) with READ-class retries, configurable |
| 101 | + `max_attempts` and `backoff_factor`, and HTTP-vs-JSON error distinction. |
| 102 | +- `AudDError` typed error enum with `is_authentication()` / `is_quota()` / etc. helpers, |
| 103 | + branded-message extraction, and code-51 deprecation pass-through (emitted via `tracing::warn!`). |
| 104 | +- Forward-compatible models — every type carries `#[serde(flatten)] extras` and |
| 105 | + `raw_response`. |
| 106 | +- Per-attempt source re-opener pattern (`prepare_source`) so retries always send a fresh |
| 107 | + multipart body. |
| 108 | +- `RecognitionMatch` enum (`Public` / `Custom`) for exhaustive pattern matching. |
| 109 | +- Built against [audd-openapi](https://github.com/AudDMusic/audd-openapi) v0.1.0 fixtures. |
0 commit comments