UNPKG

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