git ssb

0+

Matt McKegg / ssb-contacts



Tree: f81109ec165b59a9dafe1779b00333867763825b

Files: f81109ec165b59a9dafe1779b00333867763825b / index.js

1435 bytesRaw
1var FlumeReduce = require('flumeview-reduce')
2var ref = require('ssb-ref')
3
4exports.name = 'contacts'
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('contacts', FlumeReduce(1, reduce, map))
13}
14
15function reduce (result, item) {
16 if (!result) result = {}
17 if (item) {
18 for (var source in item) {
19 var valuesForSource = result[source] = result[source] || {}
20 for (var key in item[source]) {
21 var valuesForKey = valuesForSource[key] = valuesForSource[key] || {}
22 for (var dest in item[source][key]) {
23 var value = item[source][key][dest]
24 if (!valuesForKey[dest] || value[1] > valuesForKey[dest][1]) {
25 valuesForKey[dest] = value
26 }
27 }
28 }
29 }
30 }
31 return result
32}
33
34function map (msg) {
35 if (msg.value.content && msg.value.content.type === 'contact' && ref.isLink(msg.value.content.contact)) {
36 var source = msg.value.author
37 var dest = msg.value.content.contact
38 var values = {}
39
40 if ('following' in msg.value.content) {
41 values[source] = {
42 following: {
43 [dest]: [msg.value.content.following, msg.value.timestamp]
44 }
45 }
46 values[dest] = {
47 followers: {
48 [source]: [msg.value.content.following, msg.value.timestamp]
49 }
50 }
51 }
52
53 return values
54 }
55}
56

Built with git-ssb-web