Commit e36c17319f691d90c34fade06cc2dda223f17485
initial commit
Paul Frazee committed on 3/4/2015, 3:00:01 AMFiles changed
README.md | added |
index.js | added |
package.json | added |
README.md | ||
---|---|---|
@@ -1,0 +1,42 @@ | ||
1 … | +# ssb-client v1 | |
2 … | + | |
3 … | +[scuttlebot](https://github.com/ssbc/scuttlebot) client | |
4 … | + | |
5 … | +```js | |
6 … | +var pull = require('pull-stream') | |
7 … | +var ssbkeys = require('ssb-keys') | |
8 … | +var ssbclient = require('ssb-client') | |
9 … | + | |
10 … | +// generate a new keypair | |
11 … | +var keys = ssbkeys.generate() | |
12 … | + | |
13 … | +// connect to the local scuttlebot | |
14 … | +var client = ssbclient(keys, 'localhost') | |
15 … | + | |
16 … | +// listen to connection events | |
17 … | +client.on('connect', function () { | |
18 … | + console.log('connection established, authenticating...') | |
19 … | +}) | |
20 … | +client.on('authed', function () { | |
21 … | + console.log('ready to go') | |
22 … | + doWork() | |
23 … | +}) | |
24 … | +client.on('error', function (err) { | |
25 … | + // connection lost | |
26 … | + console.log('connection or authentication error', err) | |
27 … | + client.reconnect({ wait: 5000 }) | |
28 … | +}) | |
29 … | +client.on('reconnecting', function () { | |
30 … | + console.log('attempting reconnect...') | |
31 … | +}) | |
32 … | + | |
33 … | +// make calls to the scuttlebot api | |
34 … | +function doWork() { | |
35 … | + pull(client.createFeedStream(), pull.drain(console.log)) | |
36 … | + client.add({ type: 'post', text: 'hello, world!' }, console.log) | |
37 … | +} | |
38 … | +``` | |
39 … | + | |
40 … | +## License | |
41 … | + | |
42 … | +MIT, Copyright 2015 Paul Frazee and Dominic Tarr |
index.js | |||
---|---|---|---|
@@ -1,0 +1,56 @@ | |||
1 … | +var muxrpc = require('muxrpc') | ||
2 … | +var Serializer = require('pull-serializer') | ||
3 … | +var chan = require('ssb-channel') | ||
4 … | +var ssbKeys = require('ssb-keys') | ||
5 … | +var manifest = require('ssb-manifest') | ||
6 … | +var createMsg = require('secure-scuttlebutt/message')(require('secure-scuttlebutt/defaults')) | ||
7 … | + | ||
8 … | +module.exports = function (keys, address) { | ||
9 … | + var rpc = muxrpc(manifest, false, serialize)() | ||
10 … | + var client = chan.connect(ssb, address) | ||
11 … | + client.keys = keys | ||
12 … | + | ||
13 … | + copyApi(manifest, rpc, client) | ||
14 … | + | ||
15 … | + client.add = function (content, cb) { | ||
16 … | + // :TODO: get prev | ||
17 … | + var prev = null | ||
18 … | + var msg = createMsg(keys, null, content, prev) | ||
19 … | + rpc.add(msg, cb) | ||
20 … | + } | ||
21 … | + | ||
22 … | + client.auth = function (cb) { | ||
23 … | + var authReq = ssbKeys.signObj(keys, { | ||
24 … | + role: 'client', | ||
25 … | + ts: Date.now(), | ||
26 … | + public: keys.public | ||
27 … | + }) | ||
28 … | + rpc.auth(authReq, cb) | ||
29 … | + } | ||
30 … | + | ||
31 … | + client.on('connect', function () { | ||
32 … | + client.auth(function (err) { | ||
33 … | + if (err) | ||
34 … | + client.emit('error', err) | ||
35 … | + else | ||
36 … | + client.emit('authed') | ||
37 … | + }) | ||
38 … | + }) | ||
39 … | + | ||
40 … | + return client | ||
41 … | +} | ||
42 … | + | ||
43 … | +function serialize (stream) { | ||
44 … | + return Serializer(stream, JSON, {split: '\n\n'}) | ||
45 … | +} | ||
46 … | + | ||
47 … | +function copyApi (manifest, src, dst) { | ||
48 … | + for (var k in manifest) { | ||
49 … | + if (typeof manifest[k] == 'object') { | ||
50 … | + dst[k] = {} | ||
51 … | + copyApi(manifest[k], src[k], dst[k]) | ||
52 … | + } else { | ||
53 … | + dst[k] = src[k] | ||
54 … | + } | ||
55 … | + } | ||
56 … | +} |
package.json | ||
---|---|---|
@@ -1,0 +1,27 @@ | ||
1 … | +{ | |
2 … | + "name": "ssb-client", | |
3 … | + "version": "1.0.0", | |
4 … | + "description": "scuttlebot client", | |
5 … | + "main": "index.js", | |
6 … | + "scripts": { | |
7 … | + "test": "echo \"Error: no test specified\" && exit 1" | |
8 … | + }, | |
9 … | + "repository": { | |
10 … | + "type": "git", | |
11 … | + "url": "https://github.com/ssbc/ssb-client.git" | |
12 … | + }, | |
13 … | + "dependencies": { | |
14 … | + "muxrpc": "~3.3.1", | |
15 … | + "pull-serializer": "~0.3.2", | |
16 … | + "secure-scuttlebutt": "~9.0.1", | |
17 … | + "ssb-channel": "~1.0.2", | |
18 … | + "ssb-keys": "~0.4.1", | |
19 … | + "ssb-manifest": "~1.0.0" | |
20 … | + }, | |
21 … | + "author": "Paul Frazee <pfrazee@gmail.com>", | |
22 … | + "license": "MIT", | |
23 … | + "bugs": { | |
24 … | + "url": "https://github.com/ssbc/ssb-client/issues" | |
25 … | + }, | |
26 … | + "homepage": "https://github.com/ssbc/ssb-client" | |
27 … | +} |
Built with git-ssb-web