Implements the idea from #1060 - allows us to get some insight into what's happening in a libp2p node out side of just bandwidth stats.
Configures a few default metrics if metrics are enabled - current connections, the state of the dial queue, etc.
Also makes the `Metrics` class not depend on the `ConnectionManager` class, otherwise we can't collect simple metrics from the connection manager class due to the circular dependency.
BREAKING CHANGE: all API methods with peer-info parameters or return values were changed. You can check the API.md document, in order to check the new values to use
* refactor: initial refactor of the connection manager
* fix: start/stop issues
* fix: add tests and resolve pruning issues
* chore: fix lint
* test: move conn manager tests to node only for now
* chore: apply suggestions from code review
Co-Authored-By: Vasco Santos <vasco.santos@moxy.studio>
* fix: assert min max connection options
* test: fix assertion check for browser
* docs: add api and config docs for conn manager
* docs: add initial notes on stats
* feat: initial refactor of stats to metrics
* feat: add support for placeholder metrics
This is helpful for tracking metrics prior to knowing the remote peers id
* fix: add metrics tests and fix issues
* fix: always clear the dial timeout timer
* docs: add metrics to api doc
* chore: apply suggestions from code review
Co-Authored-By: Vasco Santos <vasco.santos@moxy.studio>
* docs: update metrics docs
* fix: call metrics.onDisconnect
* docs(config): add example headers so they appear in the TOC
* docs(config): add metrics configuration
* docs(relay): fix relay configuration docs