Commit ca0323c87d976d5762cc5e8fdcdcc10f37fe2ab9
Scaffold flume view to include all secret types - needs work!
Kieran committed on 4/10/2018, 8:11:23 PMParent: 707951cffedc5e5c1f850924ae7abcef1847c4e4
Files changed
index.js | added |
index.js | ||
---|---|---|
@@ -1,0 +1,88 @@ | ||
1 … | +const flumeView = require('flumeview-reduce') | |
2 … | +const pull = require('pull-stream') | |
3 … | +const get = require('lodash/get') | |
4 … | +const extend = require('xtend') | |
5 … | +const pry = require('pryjs') | |
6 … | + | |
7 … | +const FLUME_VIEW_VERSION = 1.01111111111 | |
8 … | +const FLUME_VIEW_NAME = "secrets" | |
9 … | + | |
10 … | +const MODULE_NAME = "secrets" | |
11 … | +const MSG_TYPES = ["root", "invite", "response", "contract", "secret", "announcement"] | |
12 … | + | |
13 … | +module.exports = { | |
14 … | + name: FLUME_VIEW_NAME, | |
15 … | + version: '1.0.0', | |
16 … | + manifest: { | |
17 … | + get: 'async', | |
18 … | + stream: 'source' | |
19 … | + }, | |
20 … | + init: function (server, config) { | |
21 … | + const db = server._flumeUse( | |
22 … | + FLUME_VIEW_NAME, | |
23 … | + flumeView(FLUME_VIEW_VERSION, reduce, map, null, {}) | |
24 … | + ) | |
25 … | + | |
26 … | + return { | |
27 … | + get: db.get, | |
28 … | + stream: db.stream | |
29 … | + } | |
30 … | + | |
31 … | + function reduce (accumulator, item) { | |
32 … | + var accumulator = accumulator || {} | |
33 … | + const { root, author, invite, response, contract } = item | |
34 … | + var rootNode = get(accumulator, [root], {}) | |
35 … | + if (invite.recp) { | |
36 … | + hasInvite = rootNode.invites.filter(invite => invite.id === invite.recp.id).length > 0 | |
37 … | + if (!hasInvite) rootNode.invites.push(invite) | |
38 … | + accumulator[root].invites = rootNode.invites | |
39 … | + } else if (response.recp) { | |
40 … | + hasResponse = rootNode.responses.filter(resp => resp.id === response.recp.id).length > 0 | |
41 … | + if (!hasResponse) rootNode.responses.push(response) | |
42 … | + accumulator[root].responses = rootNode.responses | |
43 … | + } else if (contract.cosigners) { | |
44 … | + accumulator[root].cosigners = rootNode.contract.cosigners | |
45 … | + } else ( | |
46 … | + accumulator[root] = {} | |
47 … | + ) | |
48 … | + return accumulator | |
49 … | + } | |
50 … | + | |
51 … | + function map (msg) { | |
52 … | + const { author, content } = msg.value | |
53 … | + var data = server.private.unbox(content, config.keys.private) | |
54 … | + if (!isSecrets()) return null | |
55 … | + recps = data.recps | |
56 … | + ? data.recps.find(recp => { | |
57 … | + return typeof recp === "string" | |
58 … | + ? recp !== data.author | |
59 … | + : recp.id !== data.author | |
60 … | + }) | |
61 … | + : null | |
62 … | + return { | |
63 … | + root: data.root || msg.key, | |
64 … | + author: author, | |
65 … | + invite: { | |
66 … | + recp: recps | |
67 … | + }, | |
68 … | + response: { | |
69 … | + recp: recps, | |
70 … | + accept: data.accept, | |
71 … | + }, | |
72 … | + contract: { | |
73 … | + cosigners: data.recps, | |
74 … | + quorum: data.quorum, | |
75 … | + shared: data.shared | |
76 … | + } | |
77 … | + } | |
78 … | + | |
79 … | + function isSecrets () { | |
80 … | + return data && | |
81 … | + data.module && | |
82 … | + data.module === MODULE_NAME && | |
83 … | + MSG_TYPES.indexOf(data.type) !== -1 | |
84 … | + } | |
85 … | + } | |
86 … | + } | |
87 … | +} | |
88 … | + |
Built with git-ssb-web