-
Notifications
You must be signed in to change notification settings - Fork 13
/
index.js
52 lines (43 loc) · 1.2 KB
/
index.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
'use strict'
const PacketStreamCodec = require('packet-stream-codec')
const EventEmitter = require('events').EventEmitter
const initStream = require('./stream')
const createRemoteApi = require('./remote-api')
const createLocalApi = require('./local-api')
function createMuxrpc (remoteManifest, localManifest, localApi, perms, codec) {
let bootstrapCB
if (typeof remoteManifest === 'function') {
bootstrapCB = remoteManifest
remoteManifest = {}
}
localManifest = localManifest || {}
remoteManifest = remoteManifest || {}
const emitter = new EventEmitter()
if (!codec) codec = PacketStreamCodec
const ws = initStream(
createLocalApi(localApi, localManifest, perms).bind(emitter),
codec,
() => {
if (emitter.closed) return
emitter.closed = true
emitter.emit('closed')
}
)
createRemoteApi(
emitter,
remoteManifest,
(type, name, args, cb) => {
if (ws.closed) throw new Error('stream is closed')
return ws.remoteCall(type, name, args, cb)
},
bootstrapCB
)
emitter.stream = ws
emitter.closed = false
emitter.close = function (err, cb) {
ws.close(err, cb)
return this
}
return emitter
}
module.exports = createMuxrpc