UNPKG

1.74 kBJavaScriptView Raw
1var tape = require('tape')
2var pull = require('pull-stream')
3var pushable = require('pull-pushable')
4var mux = require('../')
5var cont = require('cont')
6
7var api = {
8 get : 'async',
9 put : 'async',
10 del : 'async',
11 read : 'source',
12 nested: {
13 get : 'async',
14 put : 'async',
15 del : 'async',
16 read : 'source',
17 }
18}
19
20function id (e) {
21 return e
22}
23
24var store = {
25 foo: 1,
26 bar: 2,
27 baz: 3
28}
29
30function createServerAPI (store) {
31 var rpc
32 var name = 'nobody'
33
34 //this wraps a session.
35
36 var session = {
37 whoami: function (cb) {
38 cb(null, {okay: true, user: name})
39 },
40 get: function (key, cb) {
41 return cb(null, store[key])
42 },
43 put: function (key, value, cb) {
44 store[key] = value
45 cb()
46 },
47 del: function (key, cb) {
48 delete store[key]
49 cb()
50 },
51 read: function () {
52 return pull.values([1,2,3])
53 }
54 }
55
56 session.nested = session
57
58 return rpc = mux(null, api, id)(session, {allow: ['get']})
59}
60
61function createClientAPI() {
62 return mux(api, null, id)()
63}
64
65tape('secure rpc', function (t) {
66
67 var server = createServerAPI(store)
68 var client = createClientAPI()
69
70 var ss = server.createStream()
71 var cs = client.createStream()
72
73 pull(cs, ss, cs)
74
75 cont.para([
76 function (cb) {
77 client.get('foo', function (err) {
78 t.notOk(err); cb()
79 })
80 },
81 function (cb) {
82 client.put('foo', function (err) {
83 t.ok(err); cb()
84 })
85 },
86 function (cb) {
87 client.del('foo', function (err) {
88 t.ok(err); cb()
89 })
90 },
91 function (cb) {
92 pull(client.read(), pull.collect(function (err) {
93 t.ok(err); cb()
94 }))
95 }
96 ])(function (err) {
97 t.end()
98 })
99
100})
101
102