Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/karissa/hyperdiscovery
[ DEPRECATED - see https://github.com/hyperswarm/replicator for similar functionality. More info on active projects and modules at https://dat-ecosystem.org/ ]
https://github.com/karissa/hyperdiscovery
Last synced: 3 months ago
JSON representation
[ DEPRECATED - see https://github.com/hyperswarm/replicator for similar functionality. More info on active projects and modules at https://dat-ecosystem.org/ ]
- Host: GitHub
- URL: https://github.com/karissa/hyperdiscovery
- Owner: dat-ecosystem-archive
- License: mit
- Archived: true
- Created: 2016-11-28T21:05:58.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2022-01-06T16:08:36.000Z (almost 3 years ago)
- Last Synced: 2024-06-17T05:28:55.249Z (5 months ago)
- Language: JavaScript
- Homepage:
- Size: 185 KB
- Stars: 135
- Watchers: 13
- Forks: 30
- Open Issues: 8
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
- awesome-p2p - hyperdiscovery
- awesome-peer-to-peer - hyperdiscovery
- awesome-peer-to-peer - hyperdiscovery
- awesome-dat - hyperdiscovery - join the p2p swarm for hypercore feeds, uses `discovery-swarm` (Dat Core Modules / Networking)
README
[![deprecated](http://badges.github.io/stability-badges/dist/deprecated.svg)](https://github.com/hyperswarm/replicator) See [hyperswarm replicator](https://github.com/hyperswarm/replicator) for similar functionality.
More info on active projects and modules at [dat-ecosystem.org](https://dat-ecosystem.org/)
---
# hyperdiscovery
### Old documentation below
This library is compatible with hypercore<=v7, which is now out of date.
[![build status](https://travis-ci.org/datproject/hyperdiscovery.svg?branch=master)](http://travis-ci.org/datproject/hyperdiscovery)
Join the p2p swarm for [hypercore][core] and [hyperdrive][drive]. Uses
[discovery-swarm][swarm] under the hood. Also works in web browsers using [discovery-swarm-web](https://github.com/RangerMauve/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`.
```js
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:
```js
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 is `archive.replicate({live, upload, download})`.
* `upload`: bool, upload data to the other peer?
* `download`: bool, download data from the other peer?
* `port`: port for discovery swarm
* `utp`: use utp in discovery swarm
* `tcp`: use tcp in discovery swarm
* `bootstrap`: [string], WebRTC bootstrap signal servers for web
* `discovery`: string, discovery-swarm-stream server for webDefaults from datland-swarm-defaults can also be overwritten:
* `dns.server`: DNS server
* `dns.domain`: DNS domain
* `dht.bootstrap`: distributed hash table bootstrapping nodes## Debugging
Set `DEBUG='*'` in the environment to enable debugging output inside discovery-swarm.
## See Also
- [mafintosh/hypercore][core]
- [mafintosh/hyperdrive][drive]
- [mafintosh/hyperdb][db]
- [mafintosh/discovery-swarm][swarm]
- [discovery-swarm-web][swarm-web]## License
ISC[core]: https://github.com/mafintosh/hypercore
[drive]: https://github.com/mafintosh/hyperdrive
[db]: https://github.com/mafintosh/hyperdb
[swarm]: https://github.com/mafintosh/discovery-swarm
[swarm-web]: https://github.com/RangerMauve/discovery-swarm-web