1 |
|
2 | var Permissions = require('./permissions')
|
3 | var u = require('./util')
|
4 |
|
5 | module.exports =
|
6 |
|
7 | function createLocalCall(api, manifest, perms) {
|
8 | perms = Permissions(perms)
|
9 |
|
10 | function has(type, name) {
|
11 | return type === u.get(manifest, name)
|
12 | }
|
13 |
|
14 | function localCall(type, name, args) {
|
15 |
|
16 | if(name === 'emit')
|
17 | throw new Error('emit has been removed')
|
18 |
|
19 |
|
20 | if(type === 'async')
|
21 | if(has('sync', name)) {
|
22 | var cb = args.pop(), value
|
23 | try { value = u.get(api, name).apply(this, args) }
|
24 | catch (err) { return cb(err) }
|
25 | return cb(null, value)
|
26 | }
|
27 |
|
28 | if (!has(type, name))
|
29 | throw new Error('no '+type+':'+name)
|
30 |
|
31 | return u.get(api, name).apply(this, args)
|
32 | }
|
33 |
|
34 | return function (type, name, args) {
|
35 | var err = perms.pre(name, args)
|
36 | if(err) throw err
|
37 | return localCall.call(this, type, name, args)
|
38 | }
|
39 | }
|
40 |
|