-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.js
121 lines (105 loc) · 2.96 KB
/
client.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
'use strict'
var fs = require('fs')
var path = require('path')
var pull = require('pull-stream')
var toPull = require('stream-to-pull-stream')
var File = require('pull-file')
var explain = require('explain-error')
var Config = require('ssb-config/inject')
var Client = require('ssb-client')
var minimist = require('minimist')
var muxrpcli = require('muxrpcli')
var packageJson = require('./package.json')
var ssbKeys = require('ssb-keys')
const u = require('@elife/utils')
var cmdAliases = {
feed: 'createFeedStream',
history: 'createHistoryStream',
hist: 'createHistoryStream',
public: 'getPublicKey',
pub: 'getPublicKey',
log: 'createLogStream',
logt: 'messagesByType',
conf: 'config'
}
const appKey = Buffer.from('P6EGPtCNW7irtdeIk+vRVzVbWOlctUKJuce1IZkO2N4=', 'base64');
function do_(args) {
var manifestFile = path.join(u.dataLoc(), '__ssb', 'manifest.json')
let manifest
try {
manifest = JSON.parse(fs.readFileSync(manifestFile))
} catch (err) {
throw explain(err,
'no manifest file'
+ '- should be generated first time server is run'
)
}
let port = process.env['SSB_PORT']
let keys = ssbKeys.loadOrCreateSync(u.secretFile())
var opts = {
appKey: appKey,
manifest: manifest,
port,
host: 'localhost',
caps: {
shs: appKey
},
key: keys.id,
}
// connect
Client(keys, opts, function (err, rpc) {
if(err) {
if (/could not connect/.test(err.message)) {
console.error('Error: Could not connect to ssb-server ' + opts.host + ':' + opts.port)
console.error('Use the "start" command to start it.')
console.error('Use --verbose option to see full error')
throw err
process.exit(1)
}
throw err
}
// add aliases
for (var k in cmdAliases) {
rpc[k] = rpc[cmdAliases[k]]
manifest[k] = manifest[cmdAliases[k]]
}
// add some extra commands
// manifest.version = 'async'
manifest.config = 'sync'
// rpc.version = function (cb) {
// console.log(packageJson.version)
// cb()
// }
rpc.config = function (cb) {
console.log(JSON.stringify(config, null, 2))
cb()
}
if (args[0] === 'blobs.add') {
var filename = process.args[1]
var source =
filename ? File(process.args[1])
: !process.stdin.isTTY ? toPull.source(process.stdin)
: (function () {
console.error('USAGE:')
console.error(' blobs.add <filename> # add a file')
console.error(' source | blobs.add # read from stdin')
process.exit(1)
})()
pull(
source,
rpc.blobs.add(function (err, hash) {
if (err)
throw err
console.log(hash)
process.exit()
})
)
return
}
// run commandline flow
muxrpcli(args, manifest, rpc, false)
})
}
module.exports = {
do_,
}