0.015     2026-08-30 02:00:23Z

[BREAKING CHANGES]
- create_playlist() drops the user_id argument; it now takes
  ($name, $public, $description) and posts to /v1/me/playlists
  (the old /v1/users/{user_id}/playlists endpoint returns 403)
- get_access_token() now takes an authorization code and returns
  true/false, storing the tokens on the object (it previously posted
  the literal string 'code' and could never succeed)

[NEW FEATURES]
- Working OAuth authorization-code flow: authorize_url() builds the
  browser login URL, get_access_token() exchanges the code,
  refresh_access_token() renews via the stored refresh_token attribute
- unfollow_playlist() - DELETE /v1/playlists/{id}/followers

[BUG FIXES]
- User playlist methods send the Authorization header even with
  force_client_auth disabled (previously 401 on every call)
- add_items_to_playlist() sends uris as a JSON array as the API
  requires; a bare string or arrayref is accepted
- search terms and extra query parameters are URI-escaped
- Endpoint migrations for the Spotify February 2026 API changes,
  including playlist /tracks -> /items and consolidated
  /v1/me/library endpoints; removed endpoints warn once per method

[OTHER]
- Reverted the 0.014 split into WWW::Spotify::Client, ::Endpoint, and
  ::Response; the module is a single file again with the request
  machinery consolidated into shared _send_request/_build_url helpers.
  0.014's fixes (SSL verification bypass removal, URI encoding,
  client_auth_required placement) are preserved in this line

[TESTING]
- Mocked offline test suites for request building, the OAuth flow, and
  catalog methods (no credentials needed)
- Developer-only interactive live test (xt/author/live-user.t) that
  performs a real browser OAuth login and exercises user endpoints;
  skipped everywhere unless SPOTIFY_INTERACTIVE_TESTS=1

0.014     2025-01-18
- Refactored module into smaller focused units (Client, Endpoint, Response roles)
- Added explicit use strict/warnings/5.010 to all modules
- Fixed HTTP status code handling for POST/PUT/DELETE requests
- Added URI encoding for path parameters
- Improved test organization (separated user auth tests)
- Security: Removed SSL verification bypass, fixed token leak in debug output
- Fixed client_auth_required nesting in playlist and artist methods

0.013     2024-01-01 00:00:00Z
- Internal release for refactoring

0.012     2022-10-19 16:30:23Z
- Improved options for error handling (GH#11)
- Improved last_error
- Added die_on_response_error
- Added custom_request_handler
- Added custom_request_handler_result
- Added response_content_type
- Added response_status
- Removed all XML related code - Spotify API no longer supports XML

0.011    2022-10-18 10:10:00Z
- Change useragent base class from WWW::Mechanize to LWP::UserAgent (GH#13)
  (Olaf Alders)
- Tidy imports and drop support for perl 5.8 (GH#12) (Olaf Alders)

0.010     2020-09-17 21:21:55Z
- Fix credentials (GH#8) (trs-80)

0.009     2017-02-16 23:18:10-05:00 America/Toronto
- Require rather than use XML::Simple.

0.008     2016-08-07 00:00:18-04:00 America/Toronto
- Adds LWP::Protocol::https to dependencies.

0.007     2016-08-06 01:50:04-04:00 America/Toronto
- Allow users to provide their own useragents via "ua" arg to new().
- Remove unused is_valid_json() method.

0.006     2016-08-04 23:49:44-04:00 America/Toronto
- Switch from Moose to Moo + Type::Tiny

0.005     2016-07-28 22:23:03-04:00 America/Toronto
 - GitHub repo url is now in metadata.

0.004     2014-11-23
 - Enhanced documentation
 - Added query_full_url to help work with playlist results

0.003     2014-10-23
 - Changed album_tracks to albums_tracks to better match actual API call
 - Added browse_feature_playlist method
 - Added browse_new_releases method
 - Enhanced documentation
 - Improved tests

0.002     2014-06-24
 - Resolved issue with undefined item which caused tests to fail on some platforms
 - Minor changes to documention

0.001     2014-06-23
 - Initial releasee
