Files: 0a61f73856a935cde1353f9eed9dc9f27928802f / index.js
1341 bytesRaw
1 | var FlumeReduce = require('flumeview-reduce') |
2 | var ref = require('ssb-ref') |
3 | |
4 | exports.name = 'sbot-tags' |
5 | exports.version = require('./package.json').version |
6 | exports.manifest = { |
7 | stream: 'source', |
8 | get: 'async' |
9 | } |
10 | |
11 | exports.init = function (ssb, config) { |
12 | return ssb._flumeUse('tags', FlumeReduce('test', reduce, map)) |
13 | |
14 | function reduce (result, item) { |
15 | if (!result) result = {} |
16 | if (!result.tags) result.tags = {} |
17 | var tags = result.tags |
18 | |
19 | if (item) { |
20 | var { author, tag, message, tagged, timestamp } = item |
21 | if (!tags[author]) tags[author] = {} |
22 | if (!tags[author][tag]) tags[author][tag] = {} |
23 | if (!tags[author][tag][message] || timestamp > tags[author][tag][message].timestamp) { |
24 | tags[author][tag][message] = { timestamp, tagged } |
25 | } |
26 | } |
27 | |
28 | return result |
29 | } |
30 | |
31 | function map (msg) { |
32 | // unbox private message |
33 | if (msg.value.content === 'string') { |
34 | // unbox private message (requires ssb-private plugin) |
35 | msg = ssb.private.unbox(msg) |
36 | } |
37 | |
38 | if (msg.value.content && msg.value.content.type === 'tag' && ref.isLink(msg.value.content.message)) { |
39 | return { |
40 | tag: msg.key, |
41 | author: msg.value.author, |
42 | message: msg.value.content.message, |
43 | tagged: msg.value.content.tagged, |
44 | timestamp: msg.value.timestamp |
45 | } |
46 | } |
47 | } |
48 | } |
49 |
Built with git-ssb-web