### Added
- Examples (web-chat): New `/fleet` command to switch connection between
Status prod and test fleets.
- Export `generatePrivateKey` and `getPublicKey` directly from the root.
- Usage of the encryption and signature APIs to the readme.
### Changed
- **Breaking**: Renamed `WakuRelay.(add|delete)PrivateDecryptionKey` to
`WakuRelay.(add|delete)DecryptionKey` to make it clearer that it
accepts both symmetric keys and asymmetric private keys.
### Fix
- Align `WakuMessage` readme example with actual code behaviour.
### Added
- `WakuRelay.deleteObserver` to allow removal of observers, useful when
a React component add observers when mounting and needs to delete it
when unmounting.
- Keep alive feature that pings host regularly, reducing the chance of
connections being dropped due to idle.
Can be disabled or default frequency (10s) can be changed when calling
`Waku.create`.
- New `lib/utils` module for easy, dependency-less hex/bytes
conversions.
- New `peers` and `randomPeer` methods on `WakuStore` and
`WakuLightPush` to have a better idea of available peers;
Note that it does not check whether Waku node is currently connected
to said peers.
- Enable passing decryption private keys to `WakuStore.queryHistory`.
- Test: Introduce testing in browser environment (Chrome) using Karma.
- Add support for Waku Message version 1: Asymmetric encryption,
symmetric encryption, and signature of the data.
### Changed
- **Breaking**: Auto select peer if none provided for store and light
push protocols.
- Upgrade to `libp2p@0.31.7` and `libp2p-gossipsub@0.10.0` to avoid
`TextEncoder` errors in ReactJS tests.
- Disable keep alive by default as latest nim-waku release does not
support ping protocol.
- **Breaking**: Optional parameters for `WakuMessage.fromBytes` and
`WakuMessage.fromUtf8String` are now passed in a single `Options`
object.
- **Breaking**: `WakuMessage` static functions are now async to allow
for encryption and decryption.
- **Breaking**: `WakuMessage` constructor is now private, `from*` and
`decode*` function should be used.
- `WakuMessage` version 1 is partially supported, enabling asymmetrical
encryption and signature of messages;
this can be done by passing keys to `WakuMessage.from*` and
`WakuMessage.decode*` methods.
- Examples (eth-dm): Use Waku Message version 1 encryption scheme
instead of `eth-crypto`.
- Examples (eth-dm): Use Protobuf for direct messages instead of JSON
([#214](https://github.com/status-im/js-waku/issues/214)).
### Fixed
- Disable `keepAlive` if set to `0`.