git ssb

0+

Josiah / ssb-tags



Tree: 26cb584b07aa6709f758873f12119382291beab7

Files: 26cb584b07aa6709f758873f12119382291beab7 / index.js

1514 bytesRaw
1var FlumeReduce = require('flumeview-reduce')
2var ref = require('ssb-ref')
3var _ = require('lodash')
4
5exports.name = 'tags'
6exports.version = require('./package.json').version
7exports.manifest = {
8 stream: 'source',
9 get: 'async'
10}
11
12var initialState = {}
13
14exports.init = function (ssb, config) {
15 return ssb._flumeUse('tags', FlumeReduce('test', reduce, map, null, initialState))
16
17 function reduce(result, item) {
18 if (!item) return result
19
20 var { tag, author, message, tagged, timestamp } = item
21 var current = _.at(result, `${author}.${tag}.${message}`)[0]
22
23 if (tagged && (!current || timestamp > current)) {
24 var newTag = {
25 [author]: {
26 [tag]: {
27 [message]: timestamp
28 }
29 }
30 }
31 result = _.merge(result, newTag)
32 } else if (!tagged && current) {
33 delete result[author][tag][message]
34 }
35
36 return result
37 }
38
39 function map(msg) {
40 // only include your own tags (for now)
41 if (msg.value.author !== ssb.id) return
42
43 // unbox private message
44 if (msg.value.content === 'string') {
45 // unbox private message (requires ssb-private plugin)
46 msg = ssb.private.unbox(msg)
47 }
48
49 if (msg.value.content && msg.value.content.type === 'tag' && ref.isLink(msg.value.content.message)) {
50 return {
51 tag: msg.key,
52 author: msg.value.author,
53 message: msg.value.content.message,
54 tagged: msg.value.content.tagged,
55 timestamp: msg.value.timestamp
56 }
57 }
58 }
59}
60

Built with git-ssb-web