Awesome
See hyperswarm replicator for similar functionality.
More info on active projects and modules at dat-ecosystem.org <img src="https://i.imgur.com/qZWlO1y.jpg" width="30" height="30" />
hyperdiscovery
Old documentation below
This library is compatible with hypercore<=v7, which is now out of date.
Join the p2p swarm for hypercore and hyperdrive. Uses discovery-swarm under the hood. Also works in web browsers using discovery-swarm-web.
This module only works
npm install hyperdiscovery
Usage
Run the following code in two different places and they will replicate the contents of the given ARCHIVE_KEY
.
var hyperdrive = require('hyperdrive')
var hypercore = require('hypercore')
var Discovery = require('hyperdiscovery')
var archive = hyperdrive('./database', 'ARCHIVE_KEY')
var discovery = Discovery(archive)
discovery.on('connection', function (peer, type) {
console.log('got', peer, type)
console.log('connected to', discovery.connections, 'peers')
peer.on('close', function () {
console.log('peer disconnected')
})
})
// add another archive/feed later
var feed = hypercore('./feed')
discovery.add(feed) // adds this hypercore feed to the same discovery swarm
Will use discovery-swarm
to attempt to connect peers. Uses dat-swarm-defaults
for peer introduction defaults on the server side, which can be overwritten (see below).
The module can also create and join a swarm for a hypercore feed:
var hypercore = require('hypercore')
var Discovery = require('hyperdiscovery')
var feed = hypercore('/feed')
var discovery = Discovery(feed)
API
var discovery = Discovery(archive, opts)
Join the p2p swarm for the given feed. The return object, discovery
, is an event emitter that will emit a peer
event with the peer information when a peer is found.
discovery.add(archive, [opts])
Add an archive/feed to the discovery swarm. Options will be passed to discovery-swarm
. If you pass opts.announce
as a falsy value you don't announce your port (discover-only mode).
discovery.totalConnections
Get length of the list of total active connections, across all archives and feeds.
discovery.leave(discoveryKey)
Leave discovery for a specific discovery key.
discovery.rejoin(discoveryKey)
Rejoin discovery for a discovery key (*must be added first using discovery.add
).
discovery.close()
Exit the swarm, close all replication streams.
Options
stream
: function, replication stream for connection. Default isarchive.replicate({live, upload, download})
.upload
: bool, upload data to the other peer?download
: bool, download data from the other peer?port
: port for discovery swarmutp
: use utp in discovery swarmtcp
: use tcp in discovery swarmbootstrap
: [string], WebRTC bootstrap signal servers for webdiscovery
: string, discovery-swarm-stream server for web
Defaults from datland-swarm-defaults can also be overwritten:
dns.server
: DNS serverdns.domain
: DNS domaindht.bootstrap
: distributed hash table bootstrapping nodes
Debugging
Set DEBUG='*'
in the environment to enable debugging output inside discovery-swarm.
See Also
- mafintosh/hypercore
- mafintosh/hyperdrive
- mafintosh/hyperdb
- mafintosh/discovery-swarm
- discovery-swarm-web
License
ISC