git ssb

0+

mixmix / scuttle-gathering



Tree: 05e5e97a80eb654ea1c48fa695db2c863c34a3c5

Files: 05e5e97a80eb654ea1c48fa695db2c863c34a3c5 / gathering / async / get.js

1531 bytesRaw
1const { isUpdate, isAttendee } = require('ssb-gathering-schema')
2const merge = require('lodash.merge')
3const getBacklinks = require('../../lib/get-backlinks')
4const permittedOpts = require('../../lib/permitted-opts')
5
6module.exports = function (server) {
7 return function getGathering (key, cb) {
8 server.get(key, (err, value) => {
9 if (err) return cb(err)
10
11 const doc = { key, value }
12
13 getBacklinks(server)(doc, (err, backlinks) => {
14 if (err) return cb(err)
15
16 const updates = backlinks
17 .filter(isUpdate)
18 .map(m => permittedOpts(m.value.content))
19 .reduce((acc, update) => {
20 const { image } = update
21 if (image) {
22 acc.image = image
23 if (!acc.images.find(i => i.link === image.link)) acc.images.push(image)
24 delete update.image
25 }
26
27 return merge(acc, update)
28 }, { images: [] })
29
30 const attendees = backlinks
31 .filter(isAttendee)
32 .reduce((acc, msg) => {
33 const { link, remove } = msg.value.content.attendee
34 // only trust attendee calls from people themselves for now
35 if (msg.value.author !== link) return acc
36
37 if (remove) {
38 return acc.filter(feedId => feedId !== link)
39 } else {
40 if (acc.includes(link)) return acc
41 else return [...acc, link]
42 }
43 }, [])
44
45 cb(null, merge(doc, updates, { attendees }))
46 })
47 })
48 }
49}
50

Built with git-ssb-web