create a p2p webrtc swarm around a hyperlog
npm install swarmlogcreate a p2p webrtc swarm around a [hyperlog][4]
first generate some ed25519 keys:
```
$ node -pe "JSON.stringify(require('ssb-keys').generate())" > keys.json
now create a hyperlog publisher that will write a new message every second:
publish.js:
` js
var swarmlog = require('swarmlog')
var memdb = require('memdb')
var log = swarmlog({
keys: require('./keys.json'),
sodium: require('chloride/browser'),
db: memdb(),
valueEncoding: 'json',
hubs: [ 'https://signalhub.mafintosh.com' ]
})
var times = 0
setInterval(function () {
log.append({ time: Date.now(), msg: 'HELLO!x' + times })
times++
}, 1000)
`
and a follower that will consume the log:
`js
var swarmlog = require('swarmlog')
var memdb = require('memdb')
var log = swarmlog({
publicKey: require('./keys.json').public,
sodium: require('chloride/browser'),
db: memdb(),
valueEncoding: 'json',
hubs: [ 'https://signalhub.mafintosh.com' ]
})
log.createReadStream({ live: true })
.on('data', function (data) {
console.log('RECEIVED', data)
})
`
``
var swarmlog = require('swarmlog')
Create a [hyperlog][4] instance log from:
* opts.sodium - a sodium instance: require('sodium') in node orrequire('chloride/browser') in the browseropts.db
* - a [leveldb][5] instance (use [level-browserify][6] in the browser)opts.valueEncoding
* - valueEncoding to use for the hyperlogopts.hubs
* - array of [signalhub][1] hubs to useopts.publicKey
* - (or opts.public) - ed25519 public keyopts.secretKey
* - (or opts.private) - ed25519 private keyopts.keys
* - object, another place to put publicKey/public andsecretKey/privateKey/privateopts.peerStream(peer)
* - optional function that should return the stream to
use for a peer swarm connection. Use this if you want to multiplex some other
protocols on the same swarm alongside the hyperlog replication.
Public and private keys are either a hex string, a binary Buffer, or a'.ed25519'
base64-encoded string ending with (ssb-keys style).
If opts is a string it will be interpreted as the opts.publicKey for easier
following.
Optionally provide a [wrtc][3] instance as opts.wrtc to create a swarmlog in
node.
the underlying [webrtc-swarm][7] instance
the underlying [signalhub][1] instance
Currently the swarm relies on [signalhub][1] to assist in the webrtc swarm
setup, but ideally in the future this could be replaced or augmented with a
[webrtc DHT][2].
```
npm install swarmlog
BSD
[1]: https://npmjs.com/package/signalhub
[2]: https://github.com/feross/webtorrent/issues/288
[3]: https://npmjs.com/package/wrtc
[4]: https://npmjs.com/package/hyperlog
[5]: https://npmjs.com/package/levelup
[6]: https://npmjs.com/package/level-browserify
[7]: https://npmjs.com/package/webrtc-swarm