forked from arj03/ssb-browser-demo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstore.js
98 lines (80 loc) · 2.3 KB
/
store.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
var Flume = require('flumedb')
var OffsetLog = require('flumelog-aligned-offset')
var OffsetLogCompat = require('flumelog-aligned-offset/compat')
var codec = require('flumecodec/json')
var keys = require('ssb-keys')
var path = require('path')
module.exports = function (dir, ssbId) {
console.log("dir:", dir)
var log = OffsetLogCompat(OffsetLog(
path.join(dir, 'log.offset'),
{blockSize:1024*64, codec:codec}
))
var config = {
}
var store = Flume(log, true, (msg, cb) => {
if (msg && msg.value && typeof (msg.value.content) === 'string') {
var decrypted = keys.unbox(msg.value.content, SSB.net.config.keys.private)
if (!decrypted) // not for us
return cb(null, msg)
var cyphertext = msg.value.content
msg.value.content = decrypted
msg.value.meta = {
private: true,
original: {
content: cyphertext
}
}
cb(null, msg)
} else
cb(null, msg)
})
.use('keys', require('./indexes/keys')())
.use('clock', require('./indexes/clock')())
store.last = require('./indexes/last')()
// ssb-db convention used by plugins
store._flumeUse = function (name, flumeview) {
store.use(name, flumeview)
return store[name]
}
store.id = ssbId
/*
var backlinks = require('ssb-backlinks')
store.backlinks = backlinks.init(store)
*/
var friends = require('ssb-friends')
store.friends = friends.init(store, config)
var query = require('ssb-query')
store.query = query.init(store)
store.getStatus = function() {
// taken from ssb-db:
// https://github.com/ssbc/ssb-db/blob/80af97584f7700661a63fa6065885641911443ae/index.js#L66
function isObject(o) { return 'object' === typeof o }
function isFunction (f) { return 'function' === typeof f }
var plugs = {}
var sync = true
for(var k in store) {
if(store[k] && isObject(store[k]) && isFunction(store[k].since)) {
plugs[k] = store[k].since.value
sync = sync && (plugs[k] === store.since.value)
}
}
return {
since: store.since.value,
plugins: plugs,
sync: sync,
}
}
store.add = function (id, msg, cb) {
var data = {
key: id,
value: msg,
timestamp: Date.now()
}
store.append(data, function (err) {
if(err) cb(err)
else cb(null, data)
})
}
return store
}