# js-peer-info
[](http://ipn.io)
[](http://webchat.freenode.net/?channels=%23ipfs)
[](https://travis-ci.org/libp2p/js-peer-info)
[](https://coveralls.io/github/libp2p/js-peer-info?branch=master)
[](https://david-dm.org/libp2p/js-peer-info)
[](https://github.com/feross/standard)
[](https://github.com/RichardLitt/standard-readme)


## Lead Maintainer
[Pedro Teixeira](https://github.com/pgte)
## Table of Contents
- [Installation](#installation)
- [npm](#npm)
- [Node.JS, Browserify, Webpack](#nodejs-browserify-webpack)
- [Browser: `
```
## Usage
```js
const PeerInfo = require('peer-info')
const peer = new PeerInfo()
// TCP port 5001
peer.multiaddrs.add('/ip4/1.2.3.4/tcp/5001')
// UDP port 8001
peer.multiaddrs.add('/ip4/1.2.3.4/udp/8001')
// mic/speaker soundwaves using frequencies 697 and 1209
peer.multiaddrs.add('/sonic/bfsk/697/1209')
```
## API
```js
const PeerInfo = require('peer-info')
```
### `PeerInfo.create([id, ] callback)`
- `id` optional - can be a PeerId or a JSON object(will be parsed with https://github.com/libp2p/js-peer-id#createfromjsonobj)
- `callback: Function` with signature `function (err, peerInfo) {}`
Creates a new PeerInfo instance and if no `id` is passed it
generates a new underlying [PeerID](https://github.com/libp2p/js-peer-id)
for it.
### `new PeerInfo(id)`
- `id: PeerId` - instance of PeerId (optional)
Creates a new PeerInfo instance from an existing PeerId.
### `multiaddrs`
A list of multiaddresses instances that `peer` can be reached at.
### `.multiaddrs.add(addr)`
- `addr: Multiaddr`
Adds a new multiaddress that `peer` can be reached at. `addr` is an instance of
a [multiaddr](https://github.com/multiformats/js-multiaddr).
### `.multiaddrs.addSafe(addr)`
- `addr: Multiaddr`
The `addSafe` call, in comparison to `add`, will only add the multiaddr to
`multiaddrs` if the same multiaddr tries to be added twice.
This is a simple mechanism to prevent `multiaddrs` from becoming bloated with
unusable addresses, which happens when we exchange observed multiaddrs with
peers which will not provide a useful multiaddr to be shared to the rest of the
network (e.g. a multiaddr referring to a peer inside a LAN being shared to the
outside world).
### `.multiaddrs.delete(addr)`
- `addr: Multiaddr`
Removes a multiaddress instance `addr` from `peer`.
### `.multiaddrs.replace(existing, fresh)`
- `existing: Multiaddr`
- `fresh: Multiaddr`
Removes the array of multiaddresses `existing` from `peer`, and adds the array
of multiaddresses `fresh`.
## Contribute
PRs accepted.
Small note: If editing the Readme, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification.
## License
[MIT © David Dias](LICENSE)