git ssb

0+

Josiah / ssb-tags



Tree: 0a61f73856a935cde1353f9eed9dc9f27928802f

Files: 0a61f73856a935cde1353f9eed9dc9f27928802f / index.js

1341 bytesRaw
1var FlumeReduce = require('flumeview-reduce')
2var ref = require('ssb-ref')
3
4exports.name = 'sbot-tags'
5exports.version = require('./package.json').version
6exports.manifest = {
7 stream: 'source',
8 get: 'async'
9}
10
11exports.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