Commit ef2c601a248ad8bb704a322364e0c04aaac98dd6
also index private messages
Matt McKegg committed on 6/17/2017, 12:43:52 AMParent: 06963db96c5b71a42282a6f2adfe0baf0bd088e8
Files changed
README.md | changed |
index.js | changed |
lib/flumeview-links-raw.js | changed |
package.json | changed |
README.md | ||
---|---|---|
@@ -1,7 +1,7 @@ | ||
1 | 1 … | # ssb-backlinks |
2 | 2 … | |
3 | -[scuttlebot](http://scuttlebutt.nz/) plugin for indexing all link mentions of messages. | |
3 … | +[scuttlebot](http://scuttlebutt.nz/) plugin for indexing all link mentions of messages (including private for the current identity). | |
4 | 4 … | |
5 | 5 … | Walks all values of a message searching for [ssb-ref](https://github.com/ssbc/ssb-ref) recognized keys. Provides an [ssb-query](https://github.com/dominictarr/ssb-query) style interface. |
6 | 6 … | |
7 | 7 … | ## License |
index.js | ||
---|---|---|
@@ -2,16 +2,18 @@ | ||
2 | 2 … | var ref = require('ssb-ref') |
3 | 3 … | var deepEqual = require('deep-equal') |
4 | 4 … | var extend = require('xtend') |
5 | 5 … | var matchChannel = /^#[^\s#]+$/ |
6 … | +var ssbKeys = require('ssb-keys') | |
7 … | +var toUrlFriendly = require('base64-url').escape | |
6 | 8 … | |
7 | 9 … | var indexes = [ |
8 | 10 … | { key: 'DTS', value: [['dest'], ['timestamp']] }, |
9 | 11 … | { key: 'DTA', value: [['dest'], ['value', 'timestamp']] }, // asserted timestamp |
10 | 12 … | { key: 'TDT', value: [['value', 'content', 'type'], ['dest'], ['value', 'timestamp']] } |
11 | 13 … | ] |
12 | 14 … | |
13 | -var indexVersion = 2 | |
15 … | +var indexVersion = 3 | |
14 | 16 … | |
15 | 17 … | exports.name = 'backlinks' |
16 | 18 … | exports.version = require('./package.json').version |
17 | 19 … | exports.manifest = { |
@@ -19,11 +21,40 @@ | ||
19 | 21 … | } |
20 | 22 … | |
21 | 23 … | exports.init = function (ssb, config) { |
22 | 24 … | return ssb._flumeUse( |
23 | - 'backlinks', | |
24 | - FlumeQueryLinks(indexes, extractLinks, indexVersion) | |
25 … | + `backlinks-${toUrlFriendly(ssb.id.slice(1, 10))}`, | |
26 … | + FlumeQueryLinks(indexes, extractLinks, indexVersion, unbox) | |
25 | 27 … | ) |
28 … | + | |
29 … | + function unbox (msg) { | |
30 … | + if (typeof msg.value.content === 'string') { | |
31 … | + var value = unboxValue(msg.value) | |
32 … | + if (value) { | |
33 … | + return { | |
34 … | + key: msg.key, value: value, timestamp: msg.timestamp | |
35 … | + } | |
36 … | + } | |
37 … | + } | |
38 … | + return msg | |
39 … | + } | |
40 … | + | |
41 … | + function unboxValue (value) { | |
42 … | + var plaintext = null | |
43 … | + try { | |
44 … | + plaintext = ssbKeys.unbox(value.content, ssb.keys.private) | |
45 … | + } catch (ex) {} | |
46 … | + if (!plaintext) return null | |
47 … | + return { | |
48 … | + previous: value.previous, | |
49 … | + author: value.author, | |
50 … | + sequence: value.sequence, | |
51 … | + timestamp: value.timestamp, | |
52 … | + hash: value.hash, | |
53 … | + content: plaintext, | |
54 … | + private: true | |
55 … | + } | |
56 … | + } | |
26 | 57 … | } |
27 | 58 … | |
28 | 59 … | function extractLinks (msg, emit) { |
29 | 60 … | var links = new Set() |
lib/flumeview-links-raw.js | ||
---|---|---|
@@ -1,5 +1,6 @@ | ||
1 | 1 … | // FORKED TO REMOVE FILTERING APPLIED TO INDEXED DATA RESULT |
2 … | +// AND ADD unbox OPTION | |
2 | 3 … | |
3 | 4 … | |
4 | 5 … | var pull = require('pull-stream') |
5 | 6 … | var query = require('flumeview-query/query') |
@@ -10,13 +11,9 @@ | ||
10 | 11 … | var FlumeViewLevel = require('flumeview-level') |
11 | 12 … | |
12 | 13 … | var isArray = Array.isArray |
13 | 14 … | |
14 | -//sorted index. | |
15 | - | |
16 | -//split this into TWO modules. flumeview-links and flumeview-query | |
17 | -module.exports = function (indexes, links, version) { | |
18 | - | |
15 … | +module.exports = function (indexes, links, version, unbox) { | |
19 | 16 … | if(!links) |
20 | 17 … | links = function (data, emit) { emit(data) } |
21 | 18 … | |
22 | 19 … | function getIndexes (data, seq) { |
@@ -33,18 +30,20 @@ | ||
33 | 30 … | }) |
34 | 31 … | return A |
35 | 32 … | } |
36 | 33 … | |
37 | - var create = FlumeViewLevel(version || 1, function (value, seq) { | |
38 | - var A = [] | |
39 | - links(value, function (value) { | |
40 | - A = A.concat(getIndexes(value, seq)) | |
34 … | + var create = FlumeViewLevel(version || 1, function (msg, seq) { | |
35 … | + var result = [] | |
36 … | + if (typeof msg.value.content === 'string' && unbox) { | |
37 … | + msg = unbox(msg) | |
38 … | + } | |
39 … | + links(msg, function (value) { | |
40 … | + result = result.concat(getIndexes(value, seq)) | |
41 | 41 … | }) |
42 | - return A | |
42 … | + return result | |
43 | 43 … | }) |
44 | 44 … | |
45 | 45 … | return function (log, name) { |
46 | - | |
47 | 46 … | var index = create(log, name) |
48 | 47 … | var read = index.read |
49 | 48 … | |
50 | 49 … | index.read = function (opts) { |
@@ -83,9 +82,8 @@ | ||
83 | 82 … | }) |
84 | 83 … | ) |
85 | 84 … | var _opts = query(index, q) |
86 | 85 … | |
87 | - | |
88 | 86 … | _opts.values = false |
89 | 87 … | _opts.keys = true |
90 | 88 … | |
91 | 89 … | _opts.reverse = !!opts.reverse |
@@ -96,13 +94,17 @@ | ||
96 | 94 … | |
97 | 95 … | return pull( |
98 | 96 … | read(_opts), |
99 | 97 … | pull.map(function (data) { |
100 | - if(data.sync) return data | |
101 | - var o = data.value | |
102 | - for(var i = 0; i < index.value.length; i++) | |
103 | - u.set(index.value[i], data.key[i+1], o) | |
104 | - return o | |
98 … | + if (data.sync) return data | |
99 … | + var msg = data.value | |
100 … | + if (typeof msg.value.content === 'string' && unbox) { | |
101 … | + msg = unbox(msg) | |
102 … | + } | |
103 … | + for (var i = 0; i < index.value.length; i++) { | |
104 … | + u.set(index.value[i], data.key[i + 1], msg) | |
105 … | + } | |
106 … | + return msg | |
105 | 107 … | }), |
106 | 108 … | isArray(opts.query) ? mfr(opts.query) : pull.through() |
107 | 109 … | ) |
108 | 110 … | } |
package.json | ||
---|---|---|
@@ -7,14 +7,16 @@ | ||
7 | 7 … | "type": "git", |
8 | 8 … | "url": "git://github.com/ssbc/ssb-backlinks.git" |
9 | 9 … | }, |
10 | 10 … | "dependencies": { |
11 … | + "base64-url": "^1.3.3", | |
11 | 12 … | "deep-equal": "^1.0.1", |
12 | 13 … | "flumeview-level": "^2.0.3", |
13 | 14 … | "flumeview-query": "^3.0.3", |
14 | 15 … | "map-filter-reduce": "^3.0.3", |
15 | 16 … | "pull-flatmap": "0.0.1", |
16 | 17 … | "pull-stream": "^3.6.0", |
18 … | + "ssb-keys": "^7.0.9", | |
17 | 19 … | "ssb-ref": "^2.7.1", |
18 | 20 … | "xtend": "^4.0.1" |
19 | 21 … | }, |
20 | 22 … | "devDependencies": {}, |
Built with git-ssb-web