tangled
alpha
login
or
join now
evbogue.com
/
ssbc
0
fork
atom
secure-scuttlebot classic
0
fork
atom
overview
issues
pulls
pipelines
switch to muxrpc-validation 2.0
Paul Frazee
10 years ago
4e02cae1
2c03f1a9
+254
-255
12 changed files
expand all
collapse all
unified
split
bin.js
index.js
lib
cli-cmd-aliases.js
validators.js
package.json
plugins
blobs.js
block.js
friends.js
gossip.js
invite.js
private.js
validators.js
+1
-1
bin.js
···
12
12
var parse = require('mynosql-query')
13
13
var config = require('ssb-config/inject')(process.env.ssb_appname)
14
14
var muxrpcli = require('muxrpcli')
15
15
-
var cmdAliases = require('./cli-cmd-aliases')
15
15
+
var cmdAliases = require('./lib/cli-cmd-aliases')
16
16
17
17
var createSbot = require('./')
18
18
.use(require('./plugins/master'))
cli-cmd-aliases.js
lib/cli-cmd-aliases.js
+2
-3
index.js
···
8
8
var rimraf = require('rimraf')
9
9
var mdm = require('mdmanifest')
10
10
var fs = require('fs')
11
11
-
var cmdAliases = require('./cli-cmd-aliases')
12
12
-
var valid = require('muxrpc-validation')
13
13
-
valid.set(require('./validators'))
11
11
+
var cmdAliases = require('./lib/cli-cmd-aliases')
12
12
+
var valid = require('./lib/validators')
14
13
15
14
var apidocs = {
16
15
_: fs.readFileSync(__dirname + '/api.md', 'utf-8'),
+244
lib/validators.js
···
1
1
+
var valid = require('muxrpc-validation')
2
2
+
var zerr = require('zerr')
3
3
+
var ref = require('ssb-ref')
4
4
+
5
5
+
// errors
6
6
+
var MissingAttr = zerr('Usage', 'Param % must have a .% of type "%"')
7
7
+
var AttrType = zerr('Usage', '.% of param % must be of type "%"')
8
8
+
9
9
+
function isFilter (v) {
10
10
+
return (v == '@' || v == '%' || v == '&')
11
11
+
}
12
12
+
13
13
+
module.exports = valid({
14
14
+
msgId: function (v) {
15
15
+
if (!ref.isMsg(v))
16
16
+
return 'type'
17
17
+
},
18
18
+
feedId: function (v) {
19
19
+
if (!ref.isFeed(v))
20
20
+
return 'type'
21
21
+
},
22
22
+
blobId: function (v) {
23
23
+
if (!ref.isBlob(v))
24
24
+
return 'type'
25
25
+
},
26
26
+
27
27
+
msgContent: function (v, n) {
28
28
+
var err = this.get('object')(v, n)
29
29
+
if (err) return err
30
30
+
if (!v.type || typeof v.type != 'string')
31
31
+
return MissingAttr(n, 'type', 'string')
32
32
+
},
33
33
+
34
34
+
msg: function (v, n) {
35
35
+
var err = this.get('object')(v, n)
36
36
+
if (err)
37
37
+
return err
38
38
+
39
39
+
// .content
40
40
+
var err = this.get('object')(v.content, n)
41
41
+
if (err)
42
42
+
return MissingAttr(n, 'content', 'object')
43
43
+
44
44
+
// .content.type
45
45
+
if (!v.content.type || typeof v.content.type != 'string')
46
46
+
return MissingAttr(n, 'content.type', 'string')
47
47
+
48
48
+
// .author
49
49
+
if (!ref.isFeed(v.author))
50
50
+
return MissingAttr(n, 'author', 'feedId')
51
51
+
52
52
+
// .sequence
53
53
+
if (typeof v.sequence != 'number')
54
54
+
return MissingAttr(n, 'sequence', 'number')
55
55
+
56
56
+
// .previous
57
57
+
if (!ref.isMsg(v.previous))
58
58
+
return MissingAttr(n, 'previous', 'msgId')
59
59
+
60
60
+
// .timestamp
61
61
+
if (typeof v.timestamp != 'number')
62
62
+
return MissingAttr(n, 'timestamp', 'number')
63
63
+
64
64
+
// .hash
65
65
+
if (v.hash != 'sha256')
66
66
+
return zerr('Usage', 'Param % must have .hash set to "sha256"')(n)
67
67
+
68
68
+
// .signature
69
69
+
if (typeof v.signature != 'string')
70
70
+
return MissingAttr(n, 'signature', 'string')
71
71
+
},
72
72
+
73
73
+
readStreamOpts: function (v, n) {
74
74
+
var err = this.get('object')(v, n)
75
75
+
if (err)
76
76
+
return err
77
77
+
78
78
+
// .live
79
79
+
if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number')
80
80
+
return AttrType(n, 'live', 'boolean')
81
81
+
82
82
+
// .gt
83
83
+
if (v.gt && typeof v.gt != 'number')
84
84
+
return AttrType(n, 'gt', 'number')
85
85
+
86
86
+
// .gte
87
87
+
if (v.gte && typeof v.gte != 'number')
88
88
+
return AttrType(n, 'gte', 'number')
89
89
+
90
90
+
// .lt
91
91
+
if (v.lt && typeof v.lt != 'number')
92
92
+
return AttrType(n, 'lt', 'number')
93
93
+
94
94
+
// .lte
95
95
+
if (v.lte && typeof v.lte != 'number')
96
96
+
return AttrType(n, 'lte', 'number')
97
97
+
98
98
+
// .reverse
99
99
+
if (v.reverse && typeof v.reverse != 'boolean' && typeof v.reverse != 'number')
100
100
+
return AttrType(n, 'reverse', 'boolean')
101
101
+
102
102
+
// .keys
103
103
+
if (v.keys && typeof v.keys != 'boolean' && typeof v.keys != 'number')
104
104
+
return AttrType(n, 'keys', 'boolean')
105
105
+
106
106
+
// .values
107
107
+
if (v.values && typeof v.values != 'boolean' && typeof v.values != 'number')
108
108
+
return AttrType(n, 'values', 'boolean')
109
109
+
110
110
+
// .limit
111
111
+
if (v.limit && typeof v.limit != 'number')
112
112
+
return AttrType(n, 'limit', 'number')
113
113
+
114
114
+
// .fillCache
115
115
+
if (v.fillCache && typeof v.fillCache != 'boolean' && typeof v.fillCache != 'number')
116
116
+
return AttrType(n, 'fillCache', 'boolean')
117
117
+
},
118
118
+
119
119
+
createHistoryStreamOpts: function (v, n) {
120
120
+
// .id
121
121
+
if (!ref.isFeed(v.id))
122
122
+
return MissingAttr(n, 'id', 'feedId')
123
123
+
124
124
+
// .seq
125
125
+
if (v.seq && typeof v.seq != 'number')
126
126
+
return AttrType(n, 'seq', 'number')
127
127
+
128
128
+
// .live
129
129
+
if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number')
130
130
+
return AttrType(n, 'live', 'boolean')
131
131
+
},
132
132
+
133
133
+
createUserStreamOpts: function (v, n) {
134
134
+
var err = this.get('readStreamOpts')(v, n)
135
135
+
if (err)
136
136
+
return err
137
137
+
138
138
+
// .id
139
139
+
if (!ref.isFeed(v.id))
140
140
+
return MissingAttr(n, 'id', 'feedId')
141
141
+
},
142
142
+
143
143
+
messagesByTypeOpts: function (v, n) {
144
144
+
var err = this.get('readStreamOpts')(v, n)
145
145
+
if (err)
146
146
+
return err
147
147
+
148
148
+
// .type
149
149
+
if (typeof v.type != 'string')
150
150
+
return MissingAttr(n, 'type', 'string')
151
151
+
},
152
152
+
153
153
+
linksOpts: function (v, n) {
154
154
+
var err = this.get('object')(v, n)
155
155
+
if (err)
156
156
+
return err
157
157
+
158
158
+
// .source
159
159
+
if (v.source && !ref.isLink(v.source) && !isFilter(v.source))
160
160
+
return AttrType(n, 'source', 'id|filter')
161
161
+
162
162
+
// .dest
163
163
+
if (v.dest && !ref.isLink(v.dest) && !isFilter(v.dest))
164
164
+
return AttrType(n, 'dest', 'id|filter')
165
165
+
166
166
+
// .rel
167
167
+
if (v.rel && typeof v.rel != 'string')
168
168
+
return AttrType(n, 'rel', 'string')
169
169
+
170
170
+
// .live
171
171
+
if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number')
172
172
+
return AttrType(n, 'live', 'boolean')
173
173
+
174
174
+
// .reverse
175
175
+
if (v.reverse && typeof v.reverse != 'boolean' && typeof v.reverse != 'number')
176
176
+
return AttrType(n, 'reverse', 'boolean')
177
177
+
178
178
+
// .keys
179
179
+
if (v.keys && typeof v.keys != 'boolean' && typeof v.keys != 'number')
180
180
+
return AttrType(n, 'keys', 'boolean')
181
181
+
182
182
+
// .values
183
183
+
if (v.values && typeof v.values != 'boolean' && typeof v.values != 'number')
184
184
+
return AttrType(n, 'values', 'boolean')
185
185
+
},
186
186
+
187
187
+
relatedMessagesOpts: function (v, n) {
188
188
+
var err = this.get('object')(v, n)
189
189
+
if (err)
190
190
+
return err
191
191
+
192
192
+
// .id
193
193
+
if (!ref.isMsg(v.id))
194
194
+
return MissingAttr(n, 'id', 'msgId')
195
195
+
196
196
+
// .rel
197
197
+
if (v.rel && typeof v.rel != 'string')
198
198
+
return AttrType(n, 'rel', 'string')
199
199
+
200
200
+
// .count
201
201
+
if (v.count && typeof v.count != 'boolean' && typeof v.count != 'number')
202
202
+
return AttrType(n, 'count', 'boolean')
203
203
+
204
204
+
// .parent
205
205
+
if (v.parent && typeof v.parent != 'boolean' && typeof v.parent != 'number')
206
206
+
return AttrType(n, 'parent', 'boolean')
207
207
+
},
208
208
+
209
209
+
isBlockedOpts: function (v, n) {
210
210
+
var err = this.get('object')(v, n)
211
211
+
if (err)
212
212
+
return err
213
213
+
214
214
+
// .source
215
215
+
if (v.source && !ref.isFeed(v.source))
216
216
+
return AttrType(n, 'source', 'feedId')
217
217
+
218
218
+
// .dest
219
219
+
if (v.dest && !ref.isFeed(v.dest))
220
220
+
return AttrType(n, 'dest', 'feedId')
221
221
+
},
222
222
+
223
223
+
createFriendStreamOpts: function (v, n) {
224
224
+
var err = this.get('object')(v, n)
225
225
+
if (err)
226
226
+
return err
227
227
+
228
228
+
// .start
229
229
+
if (v.start && !ref.isFeed(v.start))
230
230
+
return AttrType(n, 'start', 'feedId')
231
231
+
232
232
+
// .graph
233
233
+
if (v.graph && typeof v.graph != 'string')
234
234
+
return AttrType(n, 'graph', 'string')
235
235
+
236
236
+
// .dunbar
237
237
+
if (v.dunbar && typeof v.dunbar != 'number')
238
238
+
return AttrType(n, 'dunbar', 'number')
239
239
+
240
240
+
// .hops
241
241
+
if (v.hops && typeof v.hops != 'number')
242
242
+
return AttrType(n, 'hops', 'number')
243
243
+
}
244
244
+
})
+1
-1
package.json
···
24
24
"multiblob": "^1.5.0",
25
25
"multicb": "^1.0.0",
26
26
"muxrpc": "^6.1.1",
27
27
-
"muxrpc-validation": "^1.0.0",
27
27
+
"muxrpc-validation": "^2.0.0",
28
28
"muxrpcli": "^1.0.0",
29
29
"mynosql-query": "~1.0.0",
30
30
"nomnom": "1.8.0",
+1
-1
plugins/blobs.js
···
11
11
var multicb = require('multicb')
12
12
var Notify = require('pull-notify')
13
13
var mdm = require('mdmanifest')
14
14
-
var valid = require('muxrpc-validation')
14
14
+
var valid = require('../lib/validators')
15
15
var apidoc = require('fs').readFileSync(__dirname + '/blobs.md', 'utf-8')
16
16
17
17
function isFunction (f) {
+1
-1
plugins/block.js
···
1
1
var pull = require('pull-stream')
2
2
-
var valid = require('muxrpc-validation')
2
2
+
var valid = require('../lib/validators')
3
3
4
4
exports.name = 'block'
5
5
exports.version = '1.0.0'
+1
-1
plugins/friends.js
···
4
4
var memview = require('level-memview')
5
5
var pushable = require('pull-pushable')
6
6
var mdm = require('mdmanifest')
7
7
-
var valid = require('muxrpc-validation')
7
7
+
var valid = require('../lib/validators')
8
8
var apidoc = require('fs').readFileSync(__dirname + '/friends.md', 'utf-8')
9
9
10
10
function isFunction (f) {
+1
-1
plugins/gossip.js
···
4
4
var toAddress = require('../lib/util').toAddress
5
5
var nonPrivate = require('non-private-ip')
6
6
var mdm = require('mdmanifest')
7
7
-
var valid = require('muxrpc-validation')
7
7
+
var valid = require('../lib/validators')
8
8
var apidoc = require('fs').readFileSync(__dirname + '/gossip.md', 'utf-8')
9
9
var u = require('../lib/util')
10
10
+1
-1
plugins/invite.js
···
6
6
var explain = require('explain-error')
7
7
var ip = require('ip')
8
8
var mdm = require('mdmanifest')
9
9
-
var valid = require('muxrpc-validation')
9
9
+
var valid = require('../lib/validators')
10
10
var apidoc = require('fs').readFileSync(__dirname + '/invite.md', 'utf-8')
11
11
//okay this plugin adds a method
12
12
//invite(seal({code, public})
+1
-1
plugins/private.js
···
1
1
var ssbKeys = require('ssb-keys')
2
2
var explain = require('explain-error')
3
3
var mdm = require('mdmanifest')
4
4
-
var valid = require('muxrpc-validation')
4
4
+
var valid = require('../lib/validators')
5
5
var apidoc = require('fs').readFileSync(__dirname + '/private.md', 'utf-8')
6
6
7
7
module.exports = {
-244
validators.js
···
1
1
-
var valid = require('muxrpc-validation')
2
2
-
var zerr = require('zerr')
3
3
-
var ref = require('ssb-ref')
4
4
-
5
5
-
// errors
6
6
-
var MissingAttr = zerr('Usage', 'Param % must have a .% of type "%"')
7
7
-
var AttrType = zerr('Usage', '.% of param % must be of type "%"')
8
8
-
9
9
-
function isFilter (v) {
10
10
-
return (v == '@' || v == '%' || v == '&')
11
11
-
}
12
12
-
13
13
-
module.exports.msgId = function (v) {
14
14
-
if (!ref.isMsg(v))
15
15
-
return 'type'
16
16
-
}
17
17
-
module.exports.feedId = function (v) {
18
18
-
if (!ref.isFeed(v))
19
19
-
return 'type'
20
20
-
}
21
21
-
module.exports.blobId = function (v) {
22
22
-
if (!ref.isBlob(v))
23
23
-
return 'type'
24
24
-
}
25
25
-
26
26
-
module.exports.msgContent = function (v, n) {
27
27
-
var err = valid.get('object')(v, n)
28
28
-
if (err) return err
29
29
-
if (!v.type || typeof v.type != 'string')
30
30
-
return MissingAttr(n, 'type', 'string')
31
31
-
}
32
32
-
33
33
-
module.exports.msg = function (v, n) {
34
34
-
var err = valid.get('object')(v, n)
35
35
-
if (err)
36
36
-
return err
37
37
-
38
38
-
// .content
39
39
-
var err = valid.get('object')(v.content, n)
40
40
-
if (err)
41
41
-
return MissingAttr(n, 'content', 'object')
42
42
-
43
43
-
// .content.type
44
44
-
if (!v.content.type || typeof v.content.type != 'string')
45
45
-
return MissingAttr(n, 'content.type', 'string')
46
46
-
47
47
-
// .author
48
48
-
if (!ref.isFeed(v.author))
49
49
-
return MissingAttr(n, 'author', 'feedId')
50
50
-
51
51
-
// .sequence
52
52
-
if (typeof v.sequence != 'number')
53
53
-
return MissingAttr(n, 'sequence', 'number')
54
54
-
55
55
-
// .previous
56
56
-
if (!ref.isMsg(v.previous))
57
57
-
return MissingAttr(n, 'previous', 'msgId')
58
58
-
59
59
-
// .timestamp
60
60
-
if (typeof v.timestamp != 'number')
61
61
-
return MissingAttr(n, 'timestamp', 'number')
62
62
-
63
63
-
// .hash
64
64
-
if (v.hash != 'sha256')
65
65
-
return zerr('Usage', 'Param % must have .hash set to "sha256"')(n)
66
66
-
67
67
-
// .signature
68
68
-
if (typeof v.signature != 'string')
69
69
-
return MissingAttr(n, 'signature', 'string')
70
70
-
}
71
71
-
72
72
-
module.exports.readStreamOpts = function (v, n) {
73
73
-
var err = valid.get('object')(v, n)
74
74
-
if (err)
75
75
-
return err
76
76
-
77
77
-
// .live
78
78
-
if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number')
79
79
-
return AttrType(n, 'live', 'boolean')
80
80
-
81
81
-
// .gt
82
82
-
if (v.gt && typeof v.gt != 'number')
83
83
-
return AttrType(n, 'gt', 'number')
84
84
-
85
85
-
// .gte
86
86
-
if (v.gte && typeof v.gte != 'number')
87
87
-
return AttrType(n, 'gte', 'number')
88
88
-
89
89
-
// .lt
90
90
-
if (v.lt && typeof v.lt != 'number')
91
91
-
return AttrType(n, 'lt', 'number')
92
92
-
93
93
-
// .lte
94
94
-
if (v.lte && typeof v.lte != 'number')
95
95
-
return AttrType(n, 'lte', 'number')
96
96
-
97
97
-
// .reverse
98
98
-
if (v.reverse && typeof v.reverse != 'boolean' && typeof v.reverse != 'number')
99
99
-
return AttrType(n, 'reverse', 'boolean')
100
100
-
101
101
-
// .keys
102
102
-
if (v.keys && typeof v.keys != 'boolean' && typeof v.keys != 'number')
103
103
-
return AttrType(n, 'keys', 'boolean')
104
104
-
105
105
-
// .values
106
106
-
if (v.values && typeof v.values != 'boolean' && typeof v.values != 'number')
107
107
-
return AttrType(n, 'values', 'boolean')
108
108
-
109
109
-
// .limit
110
110
-
if (v.limit && typeof v.limit != 'number')
111
111
-
return AttrType(n, 'limit', 'number')
112
112
-
113
113
-
// .fillCache
114
114
-
if (v.fillCache && typeof v.fillCache != 'boolean' && typeof v.fillCache != 'number')
115
115
-
return AttrType(n, 'fillCache', 'boolean')
116
116
-
}
117
117
-
118
118
-
module.exports.createHistoryStreamOpts = function (v, n) {
119
119
-
// .id
120
120
-
if (!ref.isFeed(v.id))
121
121
-
return MissingAttr(n, 'id', 'feedId')
122
122
-
123
123
-
// .seq
124
124
-
if (v.seq && typeof v.seq != 'number')
125
125
-
return AttrType(n, 'seq', 'number')
126
126
-
127
127
-
// .live
128
128
-
if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number')
129
129
-
return AttrType(n, 'live', 'boolean')
130
130
-
}
131
131
-
132
132
-
module.exports.createUserStreamOpts = function (v, n) {
133
133
-
var err = valid.get('readStreamOpts')(v, n)
134
134
-
if (err)
135
135
-
return err
136
136
-
137
137
-
// .id
138
138
-
if (!ref.isFeed(v.id))
139
139
-
return MissingAttr(n, 'id', 'feedId')
140
140
-
}
141
141
-
142
142
-
module.exports.messagesByTypeOpts = function (v, n) {
143
143
-
var err = valid.get('readStreamOpts')(v, n)
144
144
-
if (err)
145
145
-
return err
146
146
-
147
147
-
// .type
148
148
-
if (typeof v.type != 'string')
149
149
-
return MissingAttr(n, 'type', 'string')
150
150
-
}
151
151
-
152
152
-
module.exports.linksOpts = function (v, n) {
153
153
-
var err = valid.get('object')(v, n)
154
154
-
if (err)
155
155
-
return err
156
156
-
157
157
-
// .source
158
158
-
if (v.source && !ref.isLink(v.source) && !isFilter(v.source))
159
159
-
return AttrType(n, 'source', 'id|filter')
160
160
-
161
161
-
// .dest
162
162
-
if (v.dest && !ref.isLink(v.dest) && !isFilter(v.dest))
163
163
-
return AttrType(n, 'dest', 'id|filter')
164
164
-
165
165
-
// .rel
166
166
-
if (v.rel && typeof v.rel != 'string')
167
167
-
return AttrType(n, 'rel', 'string')
168
168
-
169
169
-
// .live
170
170
-
if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number')
171
171
-
return AttrType(n, 'live', 'boolean')
172
172
-
173
173
-
// .reverse
174
174
-
if (v.reverse && typeof v.reverse != 'boolean' && typeof v.reverse != 'number')
175
175
-
return AttrType(n, 'reverse', 'boolean')
176
176
-
177
177
-
// .keys
178
178
-
if (v.keys && typeof v.keys != 'boolean' && typeof v.keys != 'number')
179
179
-
return AttrType(n, 'keys', 'boolean')
180
180
-
181
181
-
// .values
182
182
-
if (v.values && typeof v.values != 'boolean' && typeof v.values != 'number')
183
183
-
return AttrType(n, 'values', 'boolean')
184
184
-
}
185
185
-
186
186
-
module.exports.relatedMessagesOpts = function (v, n) {
187
187
-
var err = valid.get('object')(v, n)
188
188
-
if (err)
189
189
-
return err
190
190
-
191
191
-
// .id
192
192
-
if (!ref.isMsg(v.id))
193
193
-
return MissingAttr(n, 'id', 'msgId')
194
194
-
195
195
-
// .rel
196
196
-
if (v.rel && typeof v.rel != 'string')
197
197
-
return AttrType(n, 'rel', 'string')
198
198
-
199
199
-
// .count
200
200
-
if (v.count && typeof v.count != 'boolean' && typeof v.count != 'number')
201
201
-
return AttrType(n, 'count', 'boolean')
202
202
-
203
203
-
// .parent
204
204
-
if (v.parent && typeof v.parent != 'boolean' && typeof v.parent != 'number')
205
205
-
return AttrType(n, 'parent', 'boolean')
206
206
-
}
207
207
-
208
208
-
module.exports.isBlockedOpts = function (v, n) {
209
209
-
var err = valid.get('object')(v, n)
210
210
-
if (err)
211
211
-
return err
212
212
-
213
213
-
// .source
214
214
-
if (v.source && !ref.isFeed(v.source))
215
215
-
return AttrType(n, 'source', 'feedId')
216
216
-
217
217
-
// .dest
218
218
-
if (v.dest && !ref.isFeed(v.dest))
219
219
-
return AttrType(n, 'dest', 'feedId')
220
220
-
}
221
221
-
222
222
-
module.exports.createFriendStreamOpts = function (v, n) {
223
223
-
var err = valid.get('object')(v, n)
224
224
-
if (err)
225
225
-
return err
226
226
-
227
227
-
// .start
228
228
-
if (v.start && !ref.isFeed(v.start))
229
229
-
return AttrType(n, 'start', 'feedId')
230
230
-
231
231
-
// .graph
232
232
-
if (v.graph && typeof v.graph != 'string')
233
233
-
return AttrType(n, 'graph', 'string')
234
234
-
235
235
-
// .dunbar
236
236
-
if (v.dunbar && typeof v.dunbar != 'number')
237
237
-
return AttrType(n, 'dunbar', 'number')
238
238
-
239
239
-
// .hops
240
240
-
if (v.hops && typeof v.hops != 'number')
241
241
-
return AttrType(n, 'hops', 'number')
242
242
-
}
243
243
-
244
244
-