git ssb

0+

dinoworm ๐Ÿ› / ssb-reveal



Tree: 7a7d480cfa2f27c3382f0b3397e39767d927e8bf

Files: 7a7d480cfa2f27c3382f0b3397e39767d927e8bf / bin.js

2248 bytesRaw
1var pull = require('pull-stream')
2var Client = require('ssb-client')
3var sort = require('ssb-sort')
4var parallel = require('run-parallel')
5
6var rootMessageId = process.argv[2]
7
8Client(function (err, client) {
9 if (err) throw err
10
11 parallel(
12 [
13 cb => getMessage({ client, messageId: rootMessageId }, cb),
14 cb => getThreadRepliesByRootId({ client, rootMessageId }, cb),
15 cb => client.about.get(cb)
16 ],
17 function (err, [rootMessage, threadReplies, about]) {
18 if (err) throw err
19
20 var thread = [rootMessage, ...threadReplies]
21 thread.forEach(function (message, index) {
22 if (index === 0) {
23 console.log(`- ${formatMessageLink({ message, about })}`)
24 } else {
25 console.log(` - ${formatMessageLink({ message, about })}`)
26 }
27 })
28
29 client.close()
30 }
31 )
32})
33
34function formatMessageLink ({ message, about }) {
35 var authorName = about[message.value.author]['name'][message.value.author][0]
36 var time = formatTimestamp(message.value.timestamp)
37 return `[${time} : ${authorName}](${message.key}?unbox=${message.value.unbox})`
38}
39
40function formatTimestamp (timestamp) {
41 var date = new Date(timestamp)
42 var year = date.getUTCFullYear()
43 var month = date.getUTCMonth()
44 var day = date.getUTCDate()
45 var hours = date.getUTCHours()
46 var minutes = date.getUTCMinutes()
47 return `${pad(year)}-${pad(month)}-${pad(day)} ${pad(hours)}:${pad(minutes)}`
48}
49
50function pad (number) {
51 return number < 10 ? `0${number}` : number
52}
53
54// wrap client.get to be same format as returned by indexes
55function getMessage ({ client, messageId }, cb) {
56 client.get(
57 {
58 private: true,
59 id: rootMessageId
60 },
61 function (err, message) {
62 if (err) cb(err)
63 else cb(null, { key: messageId, value: message })
64 }
65 )
66}
67
68function getThreadRepliesByRootId ({ client, rootMessageId }, cb) {
69 var query = [
70 {
71 $filter: {
72 value: {
73 content: {
74 root: rootMessageId
75 },
76 timestamp: {
77 $gt: 1
78 }
79 }
80 }
81 }
82 ]
83
84 pull(
85 client.query.read({ query }),
86 pull.collect(function (err, messages) {
87 if (err) return cb(err)
88
89 cb(null, sort(messages))
90 })
91 )
92}
93
94

Built with git-ssb-web