Skip to content

Releases: ansango/lastfm-api

Release v3.7.1

Choose a tag to compare

@ansango ansango released this 04 Sep 20:58
5449496

🐛 Bug Fixes

  • user: correct pagination schema field names in getLovedTracks, getRecentTracks, getTopAlbums, getTopArtists, and getTopTracks @attr to match the Last.fm wire names (page/perPage instead of the previously incorrect pages/perPages). Also drops the unsupported page parameter from user.getTopTags to align with the Last.fm API surface. (#172)

Thanks to @corygibbons for the original fix and to all contributors.

Full Changelog: v3.7.0...v3.7.1

Release v3.7.0

Choose a tag to compare

@ansango ansango released this 30 Aug 12:09

Release v3.7.0

See CHANGELOG.md for details.

Release v3.6.0

Choose a tag to compare

@ansango ansango released this 29 Aug 08:01

What's Changed

⚡ Pluggable Cache Layer (client.cache / @ansango/lastfm-api/cache)

  • MemoryCacheStore for Node/Bun with configurable TTL and auto garbage collection.
  • StorageCacheStore for browser environments (localStorage / sessionStorage).
  • CacheManager with hierarchical TTL resolution (per-method, per-namespace, and default fallback).
  • Integrated caching in fetcher with cache bypass for authenticated and mutation requests.

📡 Real-Time Scrobble Watcher (client.watcher / @ansango/lastfm-api/watcher)

  • Fully typed TypedEventEmitter event bus.
  • ScrobbleWatcher polling engine emitting nowPlaying, nowPlayingEnd, scrobble, idle, and error events.
  • Lifecycle management with .start(), .stop(), .isActive(), and .forcePoll().

📦 Modular Subpath Exports & Zero Dependencies

  • Added @ansango/lastfm-api/cache, @ansango/lastfm-api/cache/schemas, @ansango/lastfm-api/watcher, and @ansango/lastfm-api/watcher/schemas to package.json.
  • Removed dotenv dependency in favor of native Node/Bun environment resolution.

Full Changelog: v3.5.0...v3.6.0

Release v3.5.0

Choose a tag to compare

@ansango ansango released this 28 Aug 23:33

What's Changed in v3.5.0

🚀 Core Async Pagination & Streaming Iterators

  • core: Automatic asynchronous pagination helpers (iterateItems, collectAll, iteratePages) supporting for await loops, rate-limiting (delayMs), and boundaries (maxPages, maxItems) (closes #154).
  • arch: Decoupled canonical Core API (56 official methods) from the Analytics & Ecosystem engines with modular subpath exports @ansango/lastfm-api/core and @ansango/lastfm-api/insights (closes #151).

🧠 Advanced Insights & Analytics Engine Expansion (20 total methods)

  • insights: Added 11 new analytical methods across music taste profiling, temporal patterns, and recommendations (closes #136):
    • getObscurityScore: Mainstream vs Underground listening score (closes #137).
    • getObsessions & getForgottenFavorites: Track heavy rotation spikes and lost gems (closes #138).
    • getListeningStreaks & getListeningHeatmap: Daily streaks and 24x7 activity matrix (closes #139).
    • getAlbumHabits: Full-album vs single-track listening ratio (closes #140).
    • getGenreBreakdown & getGenreEvolution: Taxonomy and taste shifts over time (closes #141).
    • getSmartRecommendations & getBridgeArtists: Graph-based discovery and connector artists (closes #142).
    • compareTasteGroup: Multi-user affinity matrix and common ground tracks (closes #143).

📊 Reports & Wrapped Namespace (client.reports.*)

  • reports: getWrapped (yearly review / custom period with seasonal breakdown & record day detection) (closes #155).
  • reports: getMilestones (scrobble milestone tracking & estimated arrival dates) (closes #155).
  • reports: getMonthlyDigest (monthly listening digest with growth metrics) (closes #155).

🎵 Smart Playlists Namespace (client.playlists.*)

  • playlists: generate with 4 algorithmic modes: heavy-rotation, time-capsule, deep-cuts, and discovery-radar (closes #156).
  • playlists: exportM3U and exportCsv for standard media players and Spotify search queries (closes #156).

💾 Data Exporter & Backup Namespace (client.exporter.*)

  • exporter: exportScrobbles with UTS timestamp checkpointing for resumable backward scans, and export formats json, jsonl, csv, and listenbrainz (closes #157).
  • exporter: exportLovedTracks and exportLibrary for complete offline catalog backups (closes #157).

🔍 Interactive OpenAPI Reference & Scalar Docs

  • tool/api-scalar: Collapsible 5-tier tag groups (x-tagGroups) organizing all 83 interactive endpoints.

Full Changelog: v3.4.0...v3.5.0

Release v3.4.0

Choose a tag to compare

@ansango ansango released this 28 Aug 21:29

What's Changed in v3.4.0

✨ Features (Insights & Analytics Engine)

  • insights: implement compareUsers with Jaccard affinity index (closes #125)
  • insights: implement getMood psychometric classifier and getPersonality archetypes (closes #124)
  • insights: implement getTrends ranking diff and getDiscoveries new-artist detector (closes #123)
  • insights: implement getHoursHistogram and getBinges temporal analytics (closes #122)
  • insights: implement getNowPlaying with artist bio and similarity enrichment (closes #121)
  • insights: implement getSummary with Shannon diversity index (closes #120)
  • insights: base architecture, Zod schemas infrastructure, and client wiring (closes #119)
  • insights: wire insights namespace and endpoints in method registry & OpenAPI Scalar explorer

📚 Documentation

  • insights: full documentation in README.md with examples for all 9 analytical methods
  • insights: dedicated OpenAPI descriptions in Scalar
  • insights: comprehensive lastfm-cli migration guide (docs/cli-migration.md)

Full Changelog: v3.3.0...v3.4.0

Release v3.3.0

Choose a tag to compare

@ansango ansango released this 28 Aug 15:40

What's Changed in v3.3.0

✨ Features

  • auth: auth.getToken() now returns { token, authUrl } with pre-built authorization URL (closes #115)

⚠️ Breaking Changes

  • auth: remove deprecated auth.getMobileSession method (closes #117)

📚 Documentation & Tooling

  • docs: update authentication flows and README guides for web authorization
  • tool/api-scalar: remove POST /auth/get-mobile-session and update auth header documentation

Full Changelog: v3.2.0...v3.3.0

Release v3.2.0

Choose a tag to compare

@ansango ansango released this 28 Aug 11:55

What's Changed in v3.2.0

✨ Features

  • tool/api-scalar: add x-lastfm-sk header support for authenticated write methods (closes #100)

📚 Documentation

  • docs: document session key (sk) usage across all 10 write methods and web auth flow (closes #104)
  • docs: document Last.fm callback URL setup prerequisites (closes #113)
  • auth: deprecate auth.getMobileSession in favor of web authentication flow (closes #106)

🛠️ Tooling & Infrastructure

  • tool/api-scalar: provide actionable startup error message when LASTFM_API_KEY is missing (closes #107)
  • tooling: migrate linting and formatting to Biome (closes #112)

Full Changelog: v3.1.3...v3.2.0

Release v3.1.3

Choose a tag to compare

@ansango ansango released this 02 Aug 01:02

What's Changed in v3.1.3

📚 Documentation

  • docs: update README documentation for error handling, session keys, and canonical method naming (bd1d51b)

Full Changelog: v3.1.2...v3.1.3

Release v3.1.2

Choose a tag to compare

@ansango ansango released this 02 Aug 00:44

What's Changed in v3.1.2

🐛 Bug Fixes

  • auth: drop required api_key from authGetSessionRequestSchema (#62) (f1158de)
  • errors: normalize API errors via LastFmApiError class (#61) (143bede)
  • track: auto-inject sessionKey from config for scrobble calls (#60) (b2c3599)
  • track: rename scrobble methods to canonical Last.fm names (#59) (c997868)
  • utils: provide default baseUrl in buildUrl and buildAuthUrl (#58) (c6e45e6)

🔧 Chores

  • build: rebuild distribution output before release (ba62a5a)

Full Changelog: v3.1.1...v3.1.2

Release v3.1.1

Choose a tag to compare

@ansango ansango released this 07 Nov 22:09

What's Changed in v3.1.1

🔧 Chores

  • deps: update chore dependencies (543dd25)
  • deps: remove unused dependencies and obsolete files (8a3d5e2)

Full Changelog: v3.1.0...v3.1.1