The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
#### Enhancements
* Add a `PreparationStrategy` property to `BackendService` to allow for just-in-time modifications to outgoing `Request`s.
[Will McGinty](https://github.com/wmcginty)
[#171](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/171)
##### Bug Fixes
* None
5.0.0 (2023-03-23)
Enhancements
* Remove SSL pinning machinery
[Will McGinty](https://github.com/wmcginty)
[#164](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/164)
* Add ability to print formatted JSON from `HTTP.Response'.
[Will McGinty](https://github.com/wmcginty)
[#167](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/167)
* Deprecate URLQueryParameterEncoder
[Will McGinty](https://github.com/wmcginty)
[#160](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/160)
* Convert `Transporting`, `BackendServicing` and related subsystems to utilize structured concurrency.
[Will McGinty](https://github.com/wmcginty)
[#160](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/160)
* Remove migration typeliases for all the types that were deprecated in 4.0, including `RequestRecoveryStrategy`, `NetworkServiceFailureInitializable`, and `NetworkService*`.
[Will McGinty](https://github.com/wmcginty)
[#158](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/158)
Bug Fixes
* None
## 4.1.0 (2022-04-19)
#### Enhancements
* Deprecate `TrustConfiguration`, `TrustValidator`, `CertificateHasher`, `AuthenticationChallenge` and `TrustValidatingTransportService` for iOS 14+ and macOS 11+ in favor of `NSPinnedDomains` Info.plist key
[Will McGinty](https://github.com/wmcginty)
[#154](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/154)
##### Bug Fixes
* Fix an issue with `FormURLEncoder` not properly encoding ampersands
[Andrew Winn](https://github.com/andrew-winn-br)
[#155](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/155)
## 4.0.0 (2022-01-14)
#### Enhancements
* Make `TransportService` thread-safe
[Daniel Larsen](https://github.com/grandlarseny)
[#145](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/145)
* Added async / await functions for executing requests
[Daniel Larsen](https://github.com/grandlarseny)
[#142](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/142)
* Migrate to use .xcframework's when resolving depencies using Carthage
[Will McGinty](https://github.com/wmcginty)
[#139](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/139)
* Add `acceptedRange` to `HTTP.Status` subtypes and allow for individual subtypes to be detected.
[Will McGinty](https://github.com/wmcginty)
[#139](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/139)
* Strongly type `HTTP.Request.headers` and `HTTP.Response.headers` as `[HTTP.HeaderKey: HTTP.HeaderValue]`.
[Will McGinty](https://github.com/wmcginty)
[#139](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/139)
* Add functionality to consider an arbitrary `TransportFailure` a success, using `Request.recoveryTransformer`.
[Will McGinty](https://github.com/wmcginty)
[#139](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/139)
* Add an overload to `map` which passes along the `TransportSuccess` as well as the original `Response`.
[Will McGinty](https://github.com/wmcginty)
[#139](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/139)
* Migrate the request recovery strategy to the BackendServiceProtocol definition.
[Will McGinty](https://github.com/wmcginty)
[#110](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/110)
* Added `method` parameter to `HTTP.Request`.
[Alex Reyes](https://github.com/br-alex-reyes)
[#138](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/138)
* Changed underlying error in AnyError's NetworkServiceFailureInitializable implementation from NetworkServiceError to NetworkServiceFailure so it can return its failure response rather than nil.
[Richard Burgess](https://github.com/rickbdotcom)
[#95](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/95)
* Finished migrating all targets to Swift 5.
[Tyler Milner](https://github.com/tylermilner)
[#100](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/100)
* Added Carthage support.
[Ryan Gant](https://github.com/ganttastic)
[#101](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/101)
* Added Swift Package Manager support.
[Ryan Gant](https://github.com/ganttastic)
[#102](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/102)
* Migrate the request recovery strategy to the BackendServiceProtocol definition.
[Will McGinty](https://github.com/wmcginty)
[#110](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/110)
* Rename `RequestRecoveryStrategy` to `RecoveryStrategy` and allow multiple to be attached to a single `BackendService`. They are executed in the order they are initialized.
[Will McGinty](https://github.com/wmcginty)
[#117](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/117)
* Rename `DecodingFailureInitializable` to `DecodingFailureRepresentable` and make the failing `HTTP.Response` available during initialization.
[Will McGinty](https://github.com/wmcginty)
[#117](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/117)
* Create an `HTTP.Body` type to abstract the `Data` of a `URLRequest`.
[Will McGinty](https://github.com/wmcginty)
[#117](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/117)
* Several changes to simplify and refine `DecodableContainer`, as well as introduce `EncodableContainer` and `CodableContainer`.
[Will McGinty](https://github.com/wmcginty)
[#117](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/117)
* Convert `Request` protocol into a `struct` and eliminate the `AnyRequest` type. A `URLRequestCreationStrategy` has been created to allow for differences in `URLRequest` generation.
[Will McGinty](https://github.com/wmcginty)
[#117](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/117)
* Rename `Network*` to `Transport*` to provide a clearer distinction between the role of the `BackendService` and `TransportService`.
[Will McGinty](https://github.com/wmcginty)
[#117](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/117)
* Utilize `URLError` as part of the `Transporting` protocol to allow for more granularity and detail in error reporting.
[Will McGinty](https://github.com/wmcginty)
[#117](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/117)
* Make `TransportError` inits `public`.
[Earl Gaspard](https://github.com/earlgaspard)
[#121](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/121)
* Create a form URL encoded `HTTP.Body` convenience
[Will McGinty](https://github.com/wmcginty)
[#125](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/125)
* Add deprecated typealias to ease migration to 4.0
[Will McGinty](https://github.com/wmcginty)
[#124](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/124)
* Create `EmptyDecodingStrategy` to add flexibility to decoding `EmptyResponse`
[Will McGinty](https://github.com/wmcginty)
[#130](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/130)
* Add `defaultDecoder` to `RequestDefaults` and use when initializing a `Request`.
[Earl Gaspard](https://github.com/earlgaspard)
[#131](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/131)
* Make `transportService` public in `BackendService`.
[Earl Gaspard](https://github.com/earlgaspard)
[#134](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/134)
* Make `DecodingFailure.Context` properties public.
[Earl Gaspard](https://github.com/earlgaspard)
[#135](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/135)
* Add `defaultMaxRecoveryAttempts` to `RequestDefaults` and use for `maxRecoveryAttempts` in `Request`. This changes the default retries from unlimited to 1.
[Earl Gaspard](https://github.com/earlgaspard)
[#137](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/137)
##### Bug Fixes
* Add an assertion to `BackendService` if a GET HTTP request with body data is detected.
[Will McGinty](https://github.com/wmcginty)
[#106](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/106)
#### Enhancements
* None
##### Bug Fixes
* Make default implementations on `Recoverable` `public`.
[Will McGinty](https://github.com/wmcginty)
[#97](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/97)
#### Enhancements
* Add URL modification capabilitites.
[Will McGinty](https://github.com/wmcginty)
[#92](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/92)
##### Bug Fixes
* None
#### Enhancements
* Remove the type definitions deprecated in 3.0.0.
[Will McGinty](https://github.com/wmcginty)
[#77](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/77)
* Rename `dataTransformer` family of functions to `successTransformer` to more accurately reflect their purpose.
[Will McGinty](https://github.com/wmcginty)
[#78](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/78)
* Cleaned up some TODOs in the code.
[Tyler Milner](https://github.com/tylermilner)
[#80](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/80)
* Add support for SSL certificate pinning
[Will McGinty](https://github.com/wmcginty)
[#84](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/84)
* Add support for futures and chaining requests.
[Pranjal Satija](https://github.com/pranjalsatija)
[#81](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/81)
* Fix 3.0.0 changelog.
[Pranjal Satija](https://github.com/pranjalsatija)
[#82](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/82)
* Added support for Swift 5
[Will McGinty](https://github.com/wmcginty)
[#88](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/88)
* Remove the `queryParameter` property deprecated in 2.0.0.
[Will McGinty](https://github.com/wmcginty)
[#90](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/90)
##### Bug Fixes
* None.
Enhancements
* Fixed CHANGELOG for version 2.0.0/2.1.0.
[Tyler Milner](https://github.com/tylermilner)
[#73](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/73)
* Remove the type definitions deprecated in 2.0.0
[Will McGinty](https://github.com/wmcginty)
[#72](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/72)
* **[BREAKING]** Added failing type information to `DecodingFailureInitializable` allowing the API to make decisions based off of the type that failed to decode and deprecate dynamically keyed decoding.
[Will McGinty](https://github.com/wmcginty)
[#71](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/71)
* **[BREAKING]** Renamed `Request` protocol's `transformData(_:serviceSuccess:)` method to `transformSuccess(_:)`. The redundant `data` parameter was removed since the `NetworkServiceSuccess` makes it available as a property. Also simplified method signatures by introducing `RequestTransformBlock` typealias.
[Tyler Milner](https://github.com/tylermilner)
[#69](https://github.com/BottleRocketStudios/iOS-Hyperspace/issues/69)
[#70](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/70)
* Fixed minor typo in CHANGELOG where the PR URL text didn't match the underlying PR number.
[Tyler Milner](https://github.com/tylermilner)
[#68](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/68)
##### Bug Fixes
* None.
##### Enhancements
* Two new error-facing protocols were added. `NetworkServiceFailureInitializable` represents a `Swift.Error` that can be initialized from a `NetworkServiceFailure` object. `DecodingFailureInitializable` represents a `Swift.Error` that can be initialized from a `DecodingError` as a result of decoding `Data`. These conformances have been added as extensions to `AnyError` (meaning `AnyRequest` usage is unaffected). As a result of these new protocols, the `BackendServiceError` type has been removed. Types conforming to `Request` now have an associated `ErrorType` which must conform to `NetworkServiceFailureInitializable`. If a request generates any sort of failure response, the custom error type will be initialized from it instead of returning a generic `BackendServiceError`. In addition, if `Request.ErrorType` conforms to `DecodingFailureInitializable`, the custom error type will be instantiated and returned.
[Will McGinty](https://github.com/wmcginty)
[#38](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/38)
* Added a new initalizer to `AnyRequest` which accepts a `String` value designating the key of JSON at which to begin decoding.
[Will McGinty](https://github.com/wmcginty)
[#41](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/41)
* Separated the generation/encoding of the URL query from the `Request` object into an extension `URL`.
[Will McGinty](https://github.com/wmcginty)
[#40](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/40)
* Add functionality to `NetworkReqest` to allow for replacing and adding to the HTTP headers.
[Will McGinty](https://github.com/wmcginty)
[#43](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/43)
* Simplify usage of `DecodableContainer` types with `JSONDecoder`
[Will McGinty](https://github.com/wmcginty)
[#44](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/44)
* Add a subsystem which can perform transparent error handling using `RequestRecoveryStrategy`.
[Will McGinty](https://github.com/wmcginty)
[#45](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/45)
* Simplify usage of `dataTransfomer` extensions with custom error types
[Will McGinty](https://github.com/wmcginty)
[#47](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/47)
* Add `HTTP.HeaderValue` for JSON API specification.
[Earl Gaspard](https://github.com/earlgaspard)
[#46](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/46)
* Converted `HTTP.Status`nested types (`HTTP.Status.Success`, `HTTP.Status.ClientError`, etc.) from enums to `RawRepresentable` structs. This keeps the library more open for extension by allowing clients to more easily specify and use custom HTTP status codes.
[Tyler Milner](https://github.com/tylermilner)
[#49](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/49)
[#50](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/50)
* Implemented synthesized `Equatable` and `Hashable` conformance that was introduced in Swift 4.1.
[Tyler Milner](https://github.com/tylermilner)
[#51](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/51)
* Renamed `NetworkRequest` and `AnyNetworkRequest` to `Request` and `AnyRequest`.
[Will McGinty](https://github.com/wmcginty)
[#51](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/52)
* Add `headers` property to `HTTP.Response`. The method signature of `Request`’s `transformData(_:)` method has changed. If you implement a custom `transformData(_:)` method, you will need to replace it with `transformData(_:serviceSuccess:)`.
[Earl Gaspard](https://github.com/earlgaspard)
[#64](https://github.com/BottleRocketStudios/iOS-Hyperspace/pull/64)
##### Bug Fixes
* None.
#### Enhancements
- If migrating from 1.x to 2.0, be sure to check out the [migration guide](https://github.com/BottleRocketStudios/iOS-Hyperspace/blob/master/Documentation/Migrations/Hyperspace%201.x-2.0%20Migration%20Guide.md).
- Two new error-facing protocols were added. `NetworkServiceFailureInitializable` represents a `Swift.Error` that can be initialized from a `NetworkServiceFailure` object. `DecodingFailureInitializable` represents a `Swift.Error` that can be initialized from a `DecodingError` as a result of decoding `Data`. These conformances have been added as extensions to `AnyError` (meaning `AnyRequest` usage is unaffected). As a result of these new protocols, the `BackendServiceError` type has been removed. Types conforming to `Request` now have an associated `ErrorType` which must conform to `NetworkServiceFailureInitializable`. If a request generates any sort of failure response, the custom error type will be initialized from it instead of returning a generic `BackendServiceError`. In addition, if `Request.ErrorType` conforms to `DecodingFailureInitializable`, the custom error type will be instantiated and returned. Will McGinty #38
- Added a new initalizer to `AnyRequest` which accepts a `String` value designating the key of JSON at which to begin decoding. Will McGinty #41
- Separated the generation/encoding of the URL query from the `Request` object into an extension on `URL`. Will McGinty #40
- Add functionality to `Request` to allow for replacing and adding to the HTTP headers. Will McGinty #43
- Simplify usage of `DecodableContainer` types with `JSONDecoder`. Will McGinty #44
- Add a subsystem which can perform transparent error handling using `RequestRecoveryStrategy`. Will McGinty #45
- Simplify usage of dataTransfomer extensions with custom error types. Will McGinty #47
- Add `HTTP.HeaderValue` for JSON API specification. Earl Gaspard #46
- Converted `HTTP.Status` nested types (`HTTP.Status.Success`, `HTTP.Status.ClientError`, etc.) from enums to `RawRepresentable` structs. This keeps the library more open for extension by allowing clients to more easily specify and use custom HTTP status codes. Tyler Milner #49 #50
- Implemented synthesized `Equatable` and `Hashable` conformance that was introduced in Swift 4.1. Tyler Milner #51
- Renamed `NetworkRequest` and `AnyNetworkRequest` to `Request` and `AnyRequest`. Will McGinty #51
#### Bug Fixes
- None.