diff --git a/CHANGELOG.md b/CHANGELOG.md index 5614d566bb..ba9725419e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed +- Enable passing `string`s to `addPeerToAddressBook`. +- Use `addPeerToAddressBook` in examples and usage doc. + ## [0.1.0] - 2021-05-12 ### Added diff --git a/README.md b/README.md index 6f8c4424e1..347e969458 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,13 @@ Connect to a new peer: import { multiaddr } from 'multiaddr'; import PeerId from 'peer-id'; -waku.libp2p.peerStore.addressBook.add( - PeerId.createFromB58String( - '16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ' - ), - [multiaddr('/dns4/node-01.do-ams3.jdev.misc.statusim.net/tcp/7010/wss')] +// Directly dial a new peer +await waku.dial('/dns4/node-01.do-ams3.jdev.misc.statusim.net/tcp/7010/wss/p2p/16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ'); + +// Or, add peer to address book so it auto dials in the background +waku.addPeerToAddressBook( + '16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ', + ['/dns4/node-01.do-ams3.jdev.misc.statusim.net/tcp/7010/wss'] ); ``` diff --git a/examples/web-chat/src/App.tsx b/examples/web-chat/src/App.tsx index 0a01192640..d561a6fec9 100644 --- a/examples/web-chat/src/App.tsx +++ b/examples/web-chat/src/App.tsx @@ -1,4 +1,3 @@ -import { multiaddr } from 'multiaddr'; import PeerId from 'peer-id'; import { useEffect, useState } from 'react'; import './App.css'; @@ -147,17 +146,13 @@ async function initWaku(setter: (waku: Waku) => void) { setter(waku); - waku.libp2p.peerStore.addressBook.add( - PeerId.createFromB58String( - '16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ' - ), - [multiaddr('/dns4/node-01.do-ams3.jdev.misc.statusim.net/tcp/7010/wss')] + waku.addPeerToAddressBook( + '16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ', + ['/dns4/node-01.do-ams3.jdev.misc.statusim.net/tcp/7010/wss'] ); - waku.libp2p.peerStore.addressBook.add( - PeerId.createFromB58String( - '16Uiu2HAmSyrYVycqBCWcHyNVQS6zYQcdQbwyov1CDijboVRsQS37' - ), - [multiaddr('/dns4/node-01.do-ams3.jdev.misc.statusim.net/tcp/7009/wss')] + waku.addPeerToAddressBook( + '16Uiu2HAmSyrYVycqBCWcHyNVQS6zYQcdQbwyov1CDijboVRsQS37', + ['/dns4/node-01.do-ams3.jdev.misc.statusim.net/tcp/7009/wss'] ); } catch (e) { console.log('Issue starting waku ', e); diff --git a/src/lib/waku.ts b/src/lib/waku.ts index ee194e2a86..e5b944bb18 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -4,7 +4,7 @@ import { bytes } from 'libp2p-noise/dist/src/@types/basic'; import { Noise } from 'libp2p-noise/dist/src/noise'; import Websockets from 'libp2p-websockets'; import filters from 'libp2p-websockets/src/filters'; -import { Multiaddr } from 'multiaddr'; +import { Multiaddr, multiaddr } from 'multiaddr'; import PeerId from 'peer-id'; import { RelayCodec, WakuRelay } from './waku_relay'; @@ -34,12 +34,8 @@ export class Waku { /** * Create new waku node - * @param listenAddresses: Array of Multiaddrs on which the node should listen. - * If not present, the node is dial only. - * @param staticNoiseKey: A static key to use for noise, - * mainly used for test to reduce entropy usage. - * @throws If - * @returns {Promise} + * + * @param options Takes the same options than `Libp2p`. */ static async create(options: Partial): Promise { const opts = Object.assign( @@ -96,6 +92,7 @@ export class Waku { /** * Dials to the provided peer. + * * @param peer The peer to dial */ async dial( @@ -107,8 +104,27 @@ export class Waku { return this.libp2p.dialProtocol(peer, [RelayCodec, StoreCodec]); } - addPeerToAddressBook(peerId: PeerId, multiaddr: Multiaddr[]): void { - this.libp2p.peerStore.addressBook.set(peerId, multiaddr); + /** + * Add peer to address book, it will be auto-dialed in the background. + */ + addPeerToAddressBook( + peerId: PeerId | string, + multiaddrs: Multiaddr[] | string[] + ): void { + let peer; + if (typeof peerId === 'string') { + peer = PeerId.createFromB58String(peerId); + } else { + peer = peerId; + } + const addresses = multiaddrs.map((addr: Multiaddr | string) => { + if (typeof addr === 'string') { + return multiaddr(addr); + } else { + return addr; + } + }); + this.libp2p.peerStore.addressBook.set(peer, addresses); } async stop(): Promise { @@ -126,8 +142,6 @@ export class Waku { if (!localMultiaddr || localMultiaddr.toString() === '') { throw 'Not listening on localhost'; } - const multiAddrWithId = - localMultiaddr + '/p2p/' + this.libp2p.peerId.toB58String(); - return multiAddrWithId; + return localMultiaddr + '/p2p/' + this.libp2p.peerId.toB58String(); } }