## 3.0.3

* Require Dart 3.4
* Move to `dart-lang/tools` monorepo.

## 3.0.2

* Switch to using `package:lints`.
* Address a few analysis hint violations.
* Populate the pubspec `repository` field.

## 3.0.1

* Fix a bug where a `null` result to a request caused an exception.

## 3.0.0

* Migrate to null safety.
* Accept responses even if the server converts the ID to a String.

## 2.2.2

* Fix `Peer.close()` throwing `Bad state: Future already completed`.

## 2.2.1

* Fix `Peer` requests not terminating when the underlying channel is closed.

## 2.2.0

* Added `strictProtocolChecks` named parameter to `Server` and `Peer`
  constructors. Setting this parameter to false will result in the server not
  rejecting requests missing the `jsonrpc` parameter.

## 2.1.1

* Fixed issue where throwing `RpcException.methodNotFound` in an asynchronous
  fallback handler would not result in the next fallback being executed.
* Updated minimum SDK to Dart `2.2.0`.

## 2.1.0

* `Server` and related classes can now take an `onUnhandledError` callback to
  notify callers of unhandled exceptions.

## 2.0.10

* Allow `stream_channel` version 2.x

## 2.0.8

* Updated SDK version to 2.0.0-dev.17.0

## 2.0.7

* When a `Client` is closed before a request completes, the error sent to that
  request's `Future` now includes the request method to aid in debugging.

## 2.0.6

* Internal changes only.

## 2.0.5

* Internal changes only.

## 2.0.4

* `Client.sendRequest()` now throws a `StateError` if the client is closed while
  the request is in-flight. This avoids dangling `Future`s that will never be
  completed.

* Both `Client.sendRequest()` and `Client.sendNotification()` now throw
  `StateError`s if they're called after the client is closed.

## 2.0.3

* Fix new strong-mode warnings.

## 2.0.2

* Fix all strong-mode warnings.

## 2.0.1

* Fix a race condition in which a `StateError` could be top-leveled if
  `Peer.close()` was called before the underlying channel closed.

## 2.0.0

* **Breaking change:** all constructors now take a `StreamChannel` rather than a
  `Stream`/`StreamSink` pair.

* `Client.sendRequest()` and `Client.sendNotification()` no longer throw
  `StateError`s after the connection has been closed but before `Client.close()`
  has been called.

* The various `close()` methods may now be called before their corresponding
  `listen()` methods.

* The various `close()` methods now wait on the result of closing the underlying
  `StreamSink`. Be aware that [in some circumstances][issue 19095]
  `StreamController`s' `Sink.close()` futures may never complete.

[issue 19095]: https://github.com/dart-lang/sdk/issues/19095

## 1.2.0

* Add `Client.isClosed` and `Server.isClosed`, which make it possible to
  synchronously determine whether the connection is open. In particular, this
  makes it possible to reliably tell whether it's safe to call
  `Client.sendRequest`.

* Fix a race condition in `Server` where a `StateError` could be thrown if the
  connection was closed in the middle of handling a request.

* Improve stack traces for error responses.

## 1.1.1

* Update the README to match the current API.

## 1.1.0

* Add a `done` getter to `Client`, `Server`, and `Peer`.

## 1.0.0

* Add a `Client` class for communicating with external JSON-RPC 2.0 servers.

* Add a `Peer` class that's both a `Client` and a `Server`.

## 0.1.0

* Remove `Server.handleRequest()` and `Server.parseRequest()`. Instead, `new
  Server()` takes a `Stream` and a `StreamSink` and uses those behind-the-scenes
  for its communication.

* Add `Server.listen()`, which causes the server to begin listening to the
  underlying request stream.

* Add `Server.close()`, which closes the underlying request stream and response
  sink.

## 0.0.2+3

* Widen the version constraint for `stack_trace`.

## 0.0.2+2

* Fix error response to include data from `RpcException` when not a map.
