# 4.14.0

This is the final planned `4.x` release. It introduces no breaking changes, but marks a large
number of APIs, classes, and methods as deprecated ahead of the `5.0.0` release. Every deprecated
path now emits an `E_USER_DEPRECATED` runtime warning in addition to a `@deprecated` docblock, so
you can identify and update affected code before upgrading.

### Added

* `UPGRADE-5.0.md` — a full upgrade guide documenting every breaking change planned for `5.0.0`

### Deprecated

* **APIs being sunset/removed in `5.0`**: `Vonage\Meetings\Client`, `Vonage\ProactiveConnect\Client`,
  `Vonage\SimSwap\Client`, and `Vonage\NumberVerification\Client`
* **Credentials**: `Vonage\Client\Credentials\Gnp` and its GNP auth handlers
  (`GnpKeypairHandler`, `SimSwapGnpHandler`, `NumberVerificationGnpHandler`), plus the previously
  deprecated `BasicQueryHandler`, `TokenBodyHandler`, and `TokenQueryHandler`
* `Vonage\Client\Credentials\Keypair::getKey()` — use `getKeyRaw()` instead
* **`Vonage\Client` methods**: `send()`, `generateJwt()` (use `Vonage\JWT\TokenGenerator`),
  `get()`, `post()`, `put()`, `delete()`, `postUrlEncoded()`, `signRequest()`, `authRequest()`,
  `serialize()`, and `unserialize()` — use `APIResource` directly for HTTP requests
* **`getAPIResource()` / `getApiResource()`** on all module clients (Account, Application,
  Conversation, Conversion, Insights, Messages, Numbers, Redact, Secrets, SMS, Subaccount, Users,
  Verify, Verify2, Voice) and on `Vonage\Entity\IterableAPICollection`
* `Vonage\Client\APIClient` interface
* `Vonage\Client\ClientAwareInterface` and `Vonage\Client\ClientAwareTrait` — use constructor
  injection instead
* `Vonage\Client\Factory\MapFactory::hasApi()` and `getApi()`
* `Vonage\Entity\EntityInterface` and `Vonage\Entity\HasEntityTrait`
* `Vonage\Application\ApplicationInterface`
* `Vonage\Verify\Request`, `Vonage\Verify\RequestPSD2`, and `Vonage\Verify\VerificationInterface`
* `Vonage\Voice\Call\Call` and `Vonage\Voice\Call\Inbound` — use `Vonage\Voice\OutboundCall`
* `Vonage\Voice\NCCO\Action\Pay` — being removed from the API

# 3.0.1

### Changed

* Allow composer to choose psr/container 1 or 2 for downstream dependencies
* Update changelog
* Update contributors list

# 3.0.0

### Fixed
* `getCountryPrefix()` string return type

### Changed

* Major removals of deprecations, most notable `ArrayAccess`
* PSR Logger support for 2.0

# 2.10.0

### Fixed

* PHPUnit tests now no longer throw `prophesize()` depreciation notices

### Changed

* Maintainer and Contribution documents changed to reflect current ownership
* All test cases now extend off the new `VonageTestCase` class that implements the `ProphesizeTrait`

# 2.9.3

### Fixed

* Removed the automatic unicode detection to allow for intentional selection.
* Changed Readme to include how to fire test suite from composer

# 2.9.2

### Fixed

* #276 - JWTs with `sub` should now generate properly under newer PHP versions

# 2.9.1

### Fixed

* #282 - SMS Throttling response is now handled as milliseconds instead of seconds
* #282 - Fixed regex to not consume API rate limiting error and basically time out PHP scripts

# 2.9.0

### Changed

* Nexmo/nexmo-laravel#62 - Landline Toll Free numbers can be searched for

# 2.8.1

### Fixed

* #278 - Fixed issue retrieving Conversations and Users clients where the service locator didn't know what to do

### Changed

* #283 - Moved auth logic to individual handlers, to better prepare for a fix where Containers do not allow Signature and Token auth
# 2.8.0

### Added

* #272 - Added support for PSR-3 compatible logging solutions and a new debug feature to log requests/responses
* #274 - Added support for the detail field on some new Voice API incoming events (https://developer.nexmo.com/voice/voice-api/webhook-reference#event-webhook)
* #273 - Added new content-id and entity-id fields to support regional SMS requirements, and a shortcut for enabling DLT on Indian-based SMS

# 2.7.1

### Changed

* #270 - Use the actual Guzzle package version to determine of 6 or 7 is in the project

# 2.7.0

### Added

* #269 - Added PHP 8 Support

# 2.6.0

### Added

* #265 - Added support for Language and Style for NCCO Talk action

### Changed

* #257 Dropped support for PHPUnit 7
* #257 Added missing PHPDoc blocks
* #257 Added missing return type hints
* #257 Replaced qualifiers with imports
* #257 Updated and optimized examples
* #257 Applied multiple code optimizations (especially for PHP 7.2+) and simplified some logic
* #257 Updated code styling to match PSR standards
* #257 Re-ordered imports where necessary
* #257 Updated tests to get rid of deprecation messages
* #257 Fixed namespace declarations in tests
* #257 Updated code style to PSR-12
* #257 Updated phpunit.xml.dist
* #257 Added Roave Security Advisories as dev-requirement to prevent usage of packages with known security vulnerabilities
* #257 Replaced estahn/phpunit-json-assertions with martin-helmich/phpunit-json-assert due do compatibility issues with PHPUnit
* #257 Removed test build for PHP 7.1 in .travis.yml
* #257 Added missing punctuation in CONTRIBUTING.md
* #257 Updated contact email address in CODE_OF_CONDUCT.md

### Deprecated

* #265 - Deprecated use of VoiceName for NCCO Talk action

### Fixed

* #257 Fixed namespaces (Zend => Laminas, Nexmo => Vonage)
* #257 Fixed condition in Verify\Request::setCodeLength
* #257 Fixed typos and some wording in README.md

### Removed

* Removed `examples/` directory as the code snippets repo is much more up-to-date

# 2.5.0

### Changed

- #260 - Swapped out `ocramius/package-versions` for `composer/package-versions-deprecated` to work with Composer 2

# 2.4.1

### Changed

* #256 - Added support for PHPUnit 8

### Fixed

* #253, #254 - Fixed some typos in the README
* #255 - `\Vonage\Numbers\Client::searchAvailable()` now correctly handles filters using `FilterInterface`

# 2.4.0

### Changed

* #250 - Bumped minimum PHP version to 7.2
* #250 - Now supports Guzzle 7 automatically, and swaps to Guzzle 7 as a dev dependency

# 2.3.3

### Fixed

* #252 - Connect action's `eventUrl` was being set as a string, changed to single element array of strings

# 2.3.2

### Added

* #248 - Added `\Vonage\Client\MapFactory::make()` to always instatiate new objects

### Fixed

* #248 - Fixed type in URL for Account Client Factory

# 2.3.1

### Added

* #247 - Fixed missing fields on Standard/Advanced number insight getters

### Fixed

* #246 - Fixed badge URLs in README

# 2.3.0

### Added

* Support for the PSD2 Verify endpoints for EU customers
* `vonage/nexmo-bridge` as a dependency so `\Nexmo` namespaced code works with the new `\Vonage` namespace
* Calls using `\Vonage\Client\APIResource` can now specify headers for individual requests

### Changed

* Namespace changed from `\Nexmo` to `\Vonage` for all classes, interfaces, and traits

### Fixed

* Base URL overrides were not being pushed up properly
* JSON payload for transferring via NCCO or URL was malformed

# 2.2.3

### Added

* Added country as a search option for Nexmo\Numbers\Client::searchOwned()

# 2.2.2

### Fixed

* #235 - Adds a fix for calling the calls() API client

# 2.2.1

### Added

* Allow Conversations NCCO to set event URL information
* Added missing Notify webhook and new ASR code

### Changed

* NCCOs now set let default options

### Removed

* Redundant comments in client for sms() and verify() clients

# 2.2.0
This release focuses on deprecation of dead and old code, and preps many internal changes in regards to v3.0.0. Where possible upcoming v3.0.0 changes were backported where backward-compatibility could be maintained.

### Added

* New Voice and SMS interfaces, accessible through `$client->voice()` and `$client->sms()`, respectively
* Added user deprecation warnings, which can be turned on and off via the `Nexmo\Client` "show_deprecations" config option. This can help devs update in preparation in v3.0.0, and will be utilized in the future as things are deprecated.
* Many objects now have a `toArray()` serialization method, to discourage direct use of `jsonSerialize()`
* Many objects now support a `fromArray()` hydration method
* Better incoming webhook support for SMS and Voice events
* NCCO builder for Voice

### Changed

* API handling code has been conglomerated in `Nexmo\Client\APIResource` and `Nexmo\Entity\IterableAPICollection`
* All APIs ported over to the new API handling layer
* Internal Service Locator `Nexmo\Client\Factory\MapFactory` is now PSR-11 compliant, and can use factories
* Most Verify methods in the client now prefer string Request IDs
* Verify now prefers `Nexmo\Verify\Request` for starting new Verification requests

### Deprecated
For a detailed list of things that may impact an application, enable the `show_deprecations` `Nexmo\Client` option to see deprecation notices for specific code flows.

* Most forms of array access are now deprecated
* Using service layers like `$client->messages($filter)` to search has been deprecated in favor of bespoke search methods
* Requests/Responses on exceptions and entities are deprecated, and now exist in the service layer or collection
* Most methods that took raw arrays now prefer objects
* `Nexmo\Verify\Verification` objects full functionality has been deprecated, and will be used only as a value object for search requests in the future
* `Nexmo\Conversations` and `Nexmo\User` have been deprecated and will be removed in the future as the feature is in Beta status and has diverged from this implementation
* `Nexmo\Voice\Call` and `Nexmo\Voice\Message` have been deprecated and will be removed in the future as the TTS API is deprecated
* SMS searching has been deprecated and will be removed in a future update

### Removed
* No features or classes have been removed in this update, it is functionally compatible with v2.1.0 other than deprecation notices and new features.

### Fixed
* No direct bugs have been fixed as this release was designed to be as compatible with v2.1.0 as possible, however:
  * #177 should be better handled by a centralized `Nexmo\Client\Exception\ThrottleException` and has been implemented in SMS and the Numbers API
  * #219 is implicitly fixed in `Nexmo\SMS\Client::send()` as it now returns a fully hydrated collection object as a response, however this needs to be updated in Laravel itself via an update to `nexmo/laravel` and `laravel/nexmo-notification-channel `
  * #221 is implicitly fixed in `Nexmo\SMS\Client::send()` as it now returns a fully hydrated collection object that is much more up-front it is not a single object
  * #227 is implicitly fixed in `Nexmo\SMS\Webhook\InboundSMS`

### Security

* There were no known security vulnerabilities reported
