git ssb

0+

ev / mvp



Tree: 7230f37363daf6ee98fab654ab98d27397914c28

Files: 7230f37363daf6ee98fab654ab98d27397914c28 / scuttlebot.js

1702 bytesRaw
1var pull = require('pull-stream')
2var ssbKeys = require('ssb-keys')
3var ref = require('ssb-ref')
4var reconnect = require('pull-reconnect')
5
6var config = require('./config')()
7var createClient = require('ssb-client')
8var createFeed = require('ssb-feed')
9
10var keys = require('./keys')
11
12var CACHE = {}
13
14var rec = reconnect(function (isConn) {
15 function notify (value) {
16 isConn(value)
17 }
18
19 createClient(keys, {
20 manifest: require('./manifest.json'),
21 remote: config.remote,
22 caps: config.caps
23 }, function (err, _sbot) {
24 if(err)
25 return notify(err)
26
27 sbot = _sbot
28 sbot.on('closed', function () {
29 sbot = null
30 notify(new Error('closed'))
31 })
32
33 notify()
34 })
35})
36
37var internal = {
38 getLatest: rec.async(function (id, cb) {
39 sbot.getLatest(id, cb)
40 }),
41 add: rec.async(function (msg, cb) {
42 sbot.add(msg, cb)
43 })
44}
45
46var feed = createFeed(internal, keys, {remote: true})
47
48module.exports = {
49 createLogStream: rec.source(function (opts) {
50 return pull(
51 sbot.createLogStream(opts),
52 pull.through(function (e) {
53 CACHE[e.key] = CACHE[e.key] || e.value
54 })
55 )
56 }),
57 userStream: rec.source(function (config) {
58 return pull(
59 sbot.createUserStream(config),
60 pull.through(function (e) {
61 CACHE[e.key] = CACHE[e.key] || e.value
62 })
63 )
64 }),
65 links: rec.source(function (query) {
66 return sbot.links(query)
67 }),
68 get: rec.async(function (key, cb) {
69 if('function' !== typeof cb)
70 throw new Error('cb must be function')
71 if(CACHE[key]) cb(null, CACHE[key])
72 else sbot.get(key, function (err, value) {
73 if(err) return cb(err)
74 cb(null, CACHE[key] = value)
75 })
76 })
77}
78
79

Built with git-ssb-web