diff --git a/README.md b/README.md index 357a93e..9258dd5 100644 --- a/README.md +++ b/README.md @@ -264,85 +264,55 @@ class Sum extends ClientHandler { } // Server-side WebSocket setup +// Server-side setup async function startServer() { - const wss = new WebSocket.Server({ port: 8080 }); - const rpcServer = await RPCServer.createRPCServer({ - manifest: { - Sum: new Sum({}), - }, - logger: new Logger('rpc-server'), - handlerTimeoutTime: 60000, - idGen, - }); + const rpcServer = new RPCServer({ + logger: new Logger('rpc-server'), + handlerTimeoutTime: 60000, + idGen, + }); - wss.on('connection', (ws) => { - const { readable, writable } = wsToStream(ws); - rpcServer.handleStream({ readable, writable, cancel: () => {} }); - }); - return { rpcServer }; -} -type Manifest = { - Sum: ClientCaller; -}; -// Client-side WebSocket setup -async function startClient() { - return new Promise>( (resolve, reject) => { - const ws = new WebSocket('ws://localhost:8080'); - - ws.addEventListener('open', async () => { - const { readable, writable } = wsToStream(ws); - const rpcClient = await RPCClient.createRPCClient({ - manifest: { - Sum: new ClientCaller(), - }, - streamFactory: async () => ({ readable, writable, cancel: () => {} }), middlewareFactory, - logger, - idGen, - }); - resolve(rpcClient); - }); - - ws.addEventListener('error', (err) => { - reject(err); - }); - }); -} + await rpcServer.start({ + manifest: { + Sum: new Sum({}), + }, + }); -function wsToStream(ws: WebSocket): { readable: ReadableStream, writable: WritableStream } { - let readableController: ReadableStreamDefaultController | null = null; + // Create synthetic streams here + const { readable, writable } = createSyntheticStreams(); + rpcServer.handleStream({ readable, writable, cancel: () => {} }); - const readable = new ReadableStream({ - start(controller) { - readableController = controller; - }, - cancel() { - ws.close(); - }, - }); + return { rpcServer }; +} - ws.on('message', (chunk: any) => { - readableController?.enqueue(chunk); - }); +// Create synthetic streams +function createSyntheticStreams() { + const readable = new ReadableStream(); + const writable = new WritableStream(); - ws.on('close', () => { - readableController?.close(); - }); + return { readable, writable }; +} - const writable = new WritableStream({ - write(chunk) { - ws.send(chunk); - }, - close() { - ws.close(); - }, - abort() { - ws.close(); - }, - }); +type Manifest = { + Sum: ClientCaller; +}; +// Client-side WebSocket setup +// Client-side setup +async function startClient() { + const { readable, writable } = createSyntheticStreams(); + const rpcClient = new RPCClient({ + manifest: { + Sum: new ClientCaller(), + }, + streamFactory: async () => ({ readable, writable, cancel: () => {} }), + middlewareFactory, + logger, + idGen, + }); - return { readable, writable }; + return rpcClient; } -// Function to execute the Sum RPC call + // Function to execute the Sum RPC call async function executeSum(rpcClient: RPCClient) { try { @@ -367,8 +337,7 @@ async function main() { const rpcClient = await startClient(); await executeSum(rpcClient); - await rpcClient.destroy(); - await serverObject.rpcServer.destroy(); + await serverObject.rpcServer.destroy(); } catch (err) { console.error("An error occurred:", err); } @@ -417,114 +386,78 @@ FactorialStream: RawCaller; }; class FactorialStream extends RawHandler { -public handle = async ( -[request, inputStream]: [JSONRPCRequest, ReadableStream], -cancel: (reason?: any) => void, -meta: Record | undefined, -ctx: ContextTimed -): Promise<[JSONValue, ReadableStream]> => { -const { readable, writable } = new TransformStream(); - - (async () => { - const reader = inputStream.getReader(); - const writer = writable.getWriter(); - while (true) { - const { done, value } = await reader.read(); - if (done) { - break; - } - - const num = parseInt(new TextDecoder().decode(value), 10); - const factorial = factorialOf(num).toString(); - const outputBuffer = new TextEncoder().encode(factorial); - - writer.write(outputBuffer); + public handle = async ( + [request, inputStream]: [JSONRPCRequest, ReadableStream], + cancel: (reason?: any) => void, + meta: Record | undefined, + ctx: ContextTimed + ): Promise<[JSONValue, ReadableStream]> => { + const { readable, writable } = new TransformStream(); + (async () => { + const reader = inputStream.getReader(); + const writer = writable.getWriter(); + while (true) { + const { done, value } = await reader.read(); + if (done) { + break; } - writer.close(); - })(); - return ['Starting factorial computation', readable as ReadableStream]; } -} + const num = parseInt(new TextDecoder().decode(value), 10); + const factorial = factorialOf(num).toString(); + const outputBuffer = new TextEncoder().encode(factorial); -function factorialOf(n: number): number { -return n === 0 ? 1 : n * factorialOf(n - 1); -} + writer.write(outputBuffer); + } + writer.close(); + })(); -async function startServer() { -const wss = new WebSocket.Server({ port: 1221 }); -const rpcServer = await RPCServer.createRPCServer({ -manifest: { -FactorialStream: new FactorialStream({}), -}, -handlerTimeoutTime: 200, -logger, -idGen, -}); - - wss.on('connection', (ws) => { - const { readable, writable } = wsToStream(ws); - rpcServer.handleStream({ readable, writable, cancel: () => {} }); - }); - return { rpcServer }; + return ['Starting factorial computation', readable as ReadableStream]; + } } -async function startClient() { -return new Promise>((resolve, reject) => { -const ws = new WebSocket('ws://localhost:1221'); - - ws.addEventListener('open', async () => { - const { readable, writable } = wsToStream(ws); - const rpcClient = await RPCClient.createRPCClient({ - manifest: { - FactorialStream: new RawCaller(), - }, - streamFactory: async () => ({ readable, writable, cancel: () => {} }), - middlewareFactory, - logger, - idGen, - }); - resolve(rpcClient); - }); - - ws.addEventListener('error', (err) => { - reject(err); - }); - }); +function factorialOf(n: number): number { + return n === 0 ? 1 : n * factorialOf(n - 1); } -function wsToStream(ws: WebSocket): { readable: ReadableStream, writable: WritableStream } { -let readableController: ReadableStreamDefaultController | null = null; +async function startServer() { + const rpcServer = new RPCServer({ + handlerTimeoutTime: 200, + logger, + idGen, + }); - const readable = new ReadableStream({ - start(controller) { - readableController = controller; - }, - cancel() { - ws.close(); - }, - }); + await rpcServer.start({ + manifest: { + FactorialStream: new FactorialStream({}), + }, + }); - ws.on('message', (chunk: any) => { - readableController?.enqueue(chunk); - }); + // Create synthetic streams here + const { readable, writable } = createSyntheticStreams(); + rpcServer.handleStream({ readable, writable, cancel: () => {} }); - ws.on('close', () => { - readableController?.close(); - }); + return { rpcServer }; +} +// Create synthetic streams +function createSyntheticStreams() { + const readable = new ReadableStream(); + const writable = new WritableStream(); + return { readable, writable }; +} - const writable = new WritableStream({ - write(chunk) { - ws.send(chunk); - }, - close() { - ws.close(); - }, - abort() { - ws.close(); - }, - }); +async function startClient() { + const { readable, writable } = createSyntheticStreams(); + const rpcClient = new RPCClient({ + manifest: { + FactorialStream: new RawCaller(), + }, + streamFactory: async () => ({ readable, writable, cancel: () => {} }), + middlewareFactory, + logger, + idGen, + }); - return { readable, writable }; + return rpcClient; } async function execute(rpcClient: RPCClient){ @@ -571,8 +504,7 @@ const serverObject = await startServer(); const rpcClient = await startClient(); await execute(rpcClient); - await rpcClient.destroy(); - await serverObject.rpcServer.destroy(); + await serverObject.rpcServer.destroy(); } catch (err) { console.error("An error occurred:", err); } @@ -605,104 +537,58 @@ let streamFactory: StreamFactory; let middlewareFactory: MiddlewareFactory; let idGen: IdGen; - - - class SquaredNumbers extends ServerHandler{ -public handle = async function* ( -input: number, -):AsyncGenerator{ -for (let i = 0; i<= input; i++){ -yield i*i; -} -}; + public handle = async function* ( + input: number, + ):AsyncGenerator{ + for (let i = 0; i<= input; i++){ + yield i*i; + } + }; } type Manifest = { -SquaredNumbers: ServerCaller; -} -async function startServer() { -const wss = -new WebSocket.Server({ port: 1221 }); -const rpcServer = -await RPCServer.createRPCServer({ -manifest: { -SquaredNumbers: new SquaredNumbers({}), -}, -logger, -idGen, -}); - - wss.on('connection', (ws) => { - const { readable, writable } = - wsToStream(ws); - rpcServer.handleStream({ readable, writable, cancel: () => {} }); - }); - return { rpcServer }; + SquaredNumbers: ServerCaller; } - -async function startClient() { -return new Promise>((resolve, reject) => { -const ws = new WebSocket('ws://localhost:1221'); - - ws.addEventListener('open', async () => { - const { readable, writable } = - wsToStream(ws); - const rpcClient = - await RPCClient.createRPCClient({ - manifest: { - SquaredNumbers: new ServerCaller(), - }, - streamFactory: async () => ({ readable, writable, - cancel: () => {} }), - middlewareFactory, - logger, - idGen, - }); - resolve(rpcClient); - }); - - ws.addEventListener('error', (err) => { - reject(err); - }); - }); +// Create synthetic streams +function createSyntheticStreams() { + const readable = new ReadableStream(); + const writable = new WritableStream(); + return { readable, writable }; } -function wsToStream(ws: WebSocket): { readable: ReadableStream, writable: WritableStream } { -let readableController: ReadableStreamDefaultController | null = null; - - const readable = new ReadableStream({ - start(controller) { - readableController = controller; - }, - cancel() { - ws.close(); - }, - }); +async function startServer() { + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ + manifest: { + SquaredNumbers: new SquaredNumbers({}), + }, + }); - ws.on('message', (chunk: any) => { - readableController?.enqueue(chunk); - }); + const { readable, writable } = createSyntheticStreams(); + rpcServer.handleStream({ readable, writable, cancel: () => {} }); - ws.on('close', () => { - readableController?.close(); - }); + return { rpcServer }; +} - const writable = new WritableStream({ - write(chunk) { - ws.send(chunk); - }, - close() { - ws.close(); - }, - abort() { - ws.close(); - }, +async function startClient() { + return new Promise>((resolve, reject) => { + const { readable, writable } = createSyntheticStreams(); + const rpcClient = new RPCClient({ + manifest: { + SquaredNumbers: new ServerCaller(), + }, + streamFactory: async () => ({ readable, writable, cancel: () => {} }), + middlewareFactory, + logger, + idGen, }); - - return { readable, writable }; + resolve(rpcClient); + }); } - async function execute(rpcClient: RPCClient) { try { const squaredStream = await rpcClient.methods.SquaredNumbers(235); @@ -723,7 +609,6 @@ const serverObject = await startServer(); const rpcClient = await startClient(); await execute(rpcClient); - await rpcClient.destroy(); await serverObject.rpcServer.destroy(); } catch (err) { @@ -784,14 +669,16 @@ type Manifest = { async function startServer() { const wss = new WebSocket.Server({ port: 8080 }); - const rpcServer = await RPCServer.createRPCServer({ - manifest: { - SquaredDuplex: new SquaredDuplex({}), - }, + const rpcServer = new RPCServer({ logger: new Logger('rpc-server'), handlerTimeoutTime: 1000, idGen, }); + rpcServer.start({ + manifest: { + SquaredDuplex: new SquaredDuplex({}), + }, + }); wss.on('connection', (ws) => { const { readable, writable } = wsToStream(ws); @@ -806,7 +693,7 @@ async function startClient() { ws.addEventListener('open', async () => { const { readable, writable } = wsToStream(ws); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { SquaredDuplex: new DuplexCaller>(), }, @@ -886,7 +773,6 @@ async function main() { await executeSquareNumbersDuplex(rpcClient); // Add this line to run the duplex caller await serverObject.rpcServer.destroy(); - await rpcClient.destroy(); } catch (err) { console.error("An error occurred:", err); } @@ -939,88 +825,49 @@ class SquaredNumberUnary extends UnaryHandler { return input * input; }; } - -// Server-side WebSocket setup +// Create synthetic streams +function createSyntheticStreams() { + const readable = new ReadableStream(); + const writable = new WritableStream(); + return { readable, writable }; +} +// Server-side setup async function startServer() { - const wss = new WebSocket.Server({ port: 8080 }); - const rpcServer = await RPCServer.createRPCServer({ - manifest: { - SquaredNumberUnary: new SquaredNumberUnary({}), - }, + const rpcServer = new RPCServer({ logger: new Logger('rpc-server'), handlerTimeoutTime: 1000, idGen, }); - wss.on('connection', (ws) => { - const { readable, writable } = wsToStream(ws); - rpcServer.handleStream({ readable, writable, cancel: () => {} }); + await rpcServer.start({ + manifest: { + SquaredDuplex: new SquaredDuplex({}), + }, }); - return { rpcServer }; -} -type Manifest = { - SquaredNumberUnary: UnaryCaller; -}; -// Client-side WebSocket setup -async function startClient() { - return new Promise>( (resolve, reject) => { - const ws = new WebSocket('ws://localhost:8080'); - ws.addEventListener('open', async () => { - const { readable, writable } = wsToStream(ws); - const rpcClient = await RPCClient.createRPCClient({ - manifest: { - SquaredNumberUnary: new UnaryCaller(), - }, - streamFactory: async () => ({ readable, writable, cancel: () => {} }), - middlewareFactory, - logger, - idGen, - }); - resolve(rpcClient); - }); + // Replace WebSocket with synthetic stream + const { readable, writable } = createSyntheticStreams(); + rpcServer.handleStream({ readable, writable, cancel: () => {} }); - ws.addEventListener('error', (err) => { - reject(err); + return { rpcServer }; +} +// Client-side setup +async function startClient() { + return new Promise>((resolve, reject) => { + const { readable, writable } = createSyntheticStreams(); + const rpcClient = new RPCClient({ + manifest: { + SquaredDuplex: new DuplexCaller>(), + }, + streamFactory: async () => ({ readable, writable, cancel: () => {} }), + middlewareFactory, + logger, + idGen, }); + resolve(rpcClient); }); } -function wsToStream(ws: WebSocket): { readable: ReadableStream, writable: WritableStream } { - let readableController: ReadableStreamDefaultController | null = null; - - const readable = new ReadableStream({ - start(controller) { - readableController = controller; - }, - cancel() { - ws.close(); - }, - }); - - ws.on('message', (chunk: any) => { - readableController?.enqueue(chunk); - }); - - ws.on('close', () => { - readableController?.close(); - }); - - const writable = new WritableStream({ - write(chunk) { - ws.send(chunk); - }, - close() { - ws.close(); - }, - abort() { - ws.close(); - }, - }); - - return { readable, writable }; -} -// Function to execute the Sum RPC call // Function to execute the Sum RPC call async function executeSquare(rpcClient: RPCClient) { try { @@ -1042,7 +889,6 @@ async function main() { const rpcClient = await startClient(); await executeSquare(rpcClient); - await rpcClient.destroy(); await serverObject.rpcServer.destroy(); } catch (err) { console.error("An error occurred:", err); diff --git a/docs/assets/highlight.css b/docs/assets/highlight.css index 262bff7..1bf5fe5 100644 --- a/docs/assets/highlight.css +++ b/docs/assets/highlight.css @@ -7,8 +7,22 @@ --dark-hl-2: #CE9178; --light-hl-3: #0000FF; --dark-hl-3: #569CD6; - --light-hl-4: #008000; - --dark-hl-4: #6A9955; + --light-hl-4: #AF00DB; + --dark-hl-4: #C586C0; + --light-hl-5: #001080; + --dark-hl-5: #9CDCFE; + --light-hl-6: #008000; + --dark-hl-6: #6A9955; + --light-hl-7: #0070C1; + --dark-hl-7: #4FC1FF; + --light-hl-8: #267F99; + --dark-hl-8: #4EC9B0; + --light-hl-9: #000000; + --dark-hl-9: #C8C8C8; + --light-hl-10: #098658; + --dark-hl-10: #B5CEA8; + --light-hl-11: #000000FF; + --dark-hl-11: #D4D4D4; --light-code-background: #FFFFFF; --dark-code-background: #1E1E1E; } @@ -19,6 +33,13 @@ --hl-2: var(--light-hl-2); --hl-3: var(--light-hl-3); --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --hl-10: var(--light-hl-10); + --hl-11: var(--light-hl-11); --code-background: var(--light-code-background); } } @@ -28,6 +49,13 @@ --hl-2: var(--dark-hl-2); --hl-3: var(--dark-hl-3); --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --hl-10: var(--dark-hl-10); + --hl-11: var(--dark-hl-11); --code-background: var(--dark-code-background); } } @@ -37,6 +65,13 @@ --hl-2: var(--light-hl-2); --hl-3: var(--light-hl-3); --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --hl-10: var(--light-hl-10); + --hl-11: var(--light-hl-11); --code-background: var(--light-code-background); } @@ -46,6 +81,13 @@ --hl-2: var(--dark-hl-2); --hl-3: var(--dark-hl-3); --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --hl-10: var(--dark-hl-10); + --hl-11: var(--dark-hl-11); --code-background: var(--dark-code-background); } @@ -54,4 +96,11 @@ .hl-2 { color: var(--hl-2); } .hl-3 { color: var(--hl-3); } .hl-4 { color: var(--hl-4); } +.hl-5 { color: var(--hl-5); } +.hl-6 { color: var(--hl-6); } +.hl-7 { color: var(--hl-7); } +.hl-8 { color: var(--hl-8); } +.hl-9 { color: var(--hl-9); } +.hl-10 { color: var(--hl-10); } +.hl-11 { color: var(--hl-11); } pre, code { background: var(--code-background); } diff --git a/docs/assets/search.js b/docs/assets/search.js index 628222e..cd1ae05 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = JSON.parse("{\"kinds\":{\"4\":\"Namespace\",\"8\":\"Enumeration\",\"16\":\"Enumeration Member\",\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"262144\":\"Accessor\",\"4194304\":\"Type alias\"},\"rows\":[{\"kind\":128,\"name\":\"RPCClient\",\"url\":\"classes/RPCClient.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":2048,\"name\":\"createRPCClient\",\"url\":\"classes/RPCClient.html#createRPCClient\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RPCClient.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"onTimeoutCallback\",\"url\":\"classes/RPCClient.html#onTimeoutCallback\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCClient.html#onTimeoutCallback.__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCClient.onTimeoutCallback\"},{\"kind\":1024,\"name\":\"idGen\",\"url\":\"classes/RPCClient.html#idGen\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"logger\",\"url\":\"classes/RPCClient.html#logger\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"streamFactory\",\"url\":\"classes/RPCClient.html#streamFactory\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"middlewareFactory\",\"url\":\"classes/RPCClient.html#middlewareFactory\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"callerTypes\",\"url\":\"classes/RPCClient.html#callerTypes\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"registerOnTimeoutCallback\",\"url\":\"classes/RPCClient.html#registerOnTimeoutCallback\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"streamKeepAliveTimeoutTime\",\"url\":\"classes/RPCClient.html#streamKeepAliveTimeoutTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"methodsProxy\",\"url\":\"classes/RPCClient.html#methodsProxy\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCClient.html#methodsProxy.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCClient.methodsProxy\"},{\"kind\":2048,\"name\":\"destroy\",\"url\":\"classes/RPCClient.html#destroy\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RPCClient\"},{\"kind\":262144,\"name\":\"methods\",\"url\":\"classes/RPCClient.html#methods\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"unaryCaller\",\"url\":\"classes/RPCClient.html#unaryCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"serverStreamCaller\",\"url\":\"classes/RPCClient.html#serverStreamCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"clientStreamCaller\",\"url\":\"classes/RPCClient.html#clientStreamCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"duplexStreamCaller\",\"url\":\"classes/RPCClient.html#duplexStreamCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"rawStreamCaller\",\"url\":\"classes/RPCClient.html#rawStreamCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":128,\"name\":\"RPCServer\",\"url\":\"classes/RPCServer.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":2048,\"name\":\"createRPCServer\",\"url\":\"classes/RPCServer.html#createRPCServer\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCServer\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RPCServer.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"onTimeoutCallback\",\"url\":\"classes/RPCServer.html#onTimeoutCallback\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCServer.html#onTimeoutCallback.__type-4\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCServer.onTimeoutCallback\"},{\"kind\":1024,\"name\":\"idGen\",\"url\":\"classes/RPCServer.html#idGen\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"logger\",\"url\":\"classes/RPCServer.html#logger\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"handlerMap\",\"url\":\"classes/RPCServer.html#handlerMap\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"defaultTimeoutMap\",\"url\":\"classes/RPCServer.html#defaultTimeoutMap\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"handlerTimeoutTime\",\"url\":\"classes/RPCServer.html#handlerTimeoutTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"activeStreams\",\"url\":\"classes/RPCServer.html#activeStreams\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"fromError\",\"url\":\"classes/RPCServer.html#fromError\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCServer.html#fromError.__type-2\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCServer.fromError\"},{\"kind\":1024,\"name\":\"filterSensitive\",\"url\":\"classes/RPCServer.html#filterSensitive\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCServer.html#filterSensitive.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCServer.filterSensitive\"},{\"kind\":1024,\"name\":\"toError\",\"url\":\"classes/RPCServer.html#toError\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCServer.html#toError.__type-6\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCServer.toError\"},{\"kind\":1024,\"name\":\"middlewareFactory\",\"url\":\"classes/RPCServer.html#middlewareFactory\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerOnTimeoutCallback\",\"url\":\"classes/RPCServer.html#registerOnTimeoutCallback\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"destroy\",\"url\":\"classes/RPCServer.html#destroy\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerRawStreamHandler\",\"url\":\"classes/RPCServer.html#registerRawStreamHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerDuplexStreamHandler\",\"url\":\"classes/RPCServer.html#registerDuplexStreamHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerUnaryHandler\",\"url\":\"classes/RPCServer.html#registerUnaryHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerServerStreamHandler\",\"url\":\"classes/RPCServer.html#registerServerStreamHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerClientStreamHandler\",\"url\":\"classes/RPCServer.html#registerClientStreamHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"handleStream\",\"url\":\"classes/RPCServer.html#handleStream\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCServer\"},{\"kind\":4,\"name\":\"utils\",\"url\":\"modules/utils.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"parseJSONRPCRequest\",\"url\":\"functions/utils.parseJSONRPCRequest.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCRequestMessage\",\"url\":\"functions/utils.parseJSONRPCRequestMessage.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCRequestNotification\",\"url\":\"functions/utils.parseJSONRPCRequestNotification.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCResponseResult\",\"url\":\"functions/utils.parseJSONRPCResponseResult.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCResponseError\",\"url\":\"functions/utils.parseJSONRPCResponseError.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCResponse\",\"url\":\"functions/utils.parseJSONRPCResponse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCMessage\",\"url\":\"functions/utils.parseJSONRPCMessage.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"filterSensitive\",\"url\":\"functions/utils.filterSensitive.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/utils.filterSensitive.html#filterSensitive.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"utils.filterSensitive.filterSensitive\"},{\"kind\":64,\"name\":\"fromError\",\"url\":\"functions/utils.fromError.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"toError\",\"url\":\"functions/utils.toError.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"clientInputTransformStream\",\"url\":\"functions/utils.clientInputTransformStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"clientOutputTransformStream\",\"url\":\"functions/utils.clientOutputTransformStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"getHandlerTypes\",\"url\":\"functions/utils.getHandlerTypes.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseHeadStream\",\"url\":\"functions/utils.parseHeadStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"promise\",\"url\":\"functions/utils.promise.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"isObject\",\"url\":\"functions/utils.isObject.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"sleep\",\"url\":\"functions/utils.sleep.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":4,\"name\":\"types\",\"url\":\"modules/types.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":4194304,\"name\":\"IdGen\",\"url\":\"types/types.IdGen.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.IdGen.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.IdGen\"},{\"kind\":4194304,\"name\":\"JSONRPCRequestMessage\",\"url\":\"types/types.JSONRPCRequestMessage.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.JSONRPCRequestMessage.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.JSONRPCRequestMessage\"},{\"kind\":1024,\"name\":\"jsonrpc\",\"url\":\"types/types.JSONRPCRequestMessage.html#__type.jsonrpc\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCRequestMessage.__type\"},{\"kind\":1024,\"name\":\"method\",\"url\":\"types/types.JSONRPCRequestMessage.html#__type.method\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCRequestMessage.__type\"},{\"kind\":1024,\"name\":\"params\",\"url\":\"types/types.JSONRPCRequestMessage.html#__type.params\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCRequestMessage.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"types/types.JSONRPCRequestMessage.html#__type.id\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCRequestMessage.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCRequestNotification\",\"url\":\"types/types.JSONRPCRequestNotification.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.JSONRPCRequestNotification.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.JSONRPCRequestNotification\"},{\"kind\":1024,\"name\":\"jsonrpc\",\"url\":\"types/types.JSONRPCRequestNotification.html#__type.jsonrpc\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCRequestNotification.__type\"},{\"kind\":1024,\"name\":\"method\",\"url\":\"types/types.JSONRPCRequestNotification.html#__type.method\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCRequestNotification.__type\"},{\"kind\":1024,\"name\":\"params\",\"url\":\"types/types.JSONRPCRequestNotification.html#__type.params\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCRequestNotification.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCResponseResult\",\"url\":\"types/types.JSONRPCResponseResult.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.JSONRPCResponseResult.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.JSONRPCResponseResult\"},{\"kind\":1024,\"name\":\"jsonrpc\",\"url\":\"types/types.JSONRPCResponseResult.html#__type.jsonrpc\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCResponseResult.__type\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"types/types.JSONRPCResponseResult.html#__type.result\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCResponseResult.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"types/types.JSONRPCResponseResult.html#__type.id\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCResponseResult.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCResponseError\",\"url\":\"types/types.JSONRPCResponseError.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.JSONRPCResponseError.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.JSONRPCResponseError\"},{\"kind\":1024,\"name\":\"jsonrpc\",\"url\":\"types/types.JSONRPCResponseError.html#__type.jsonrpc\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCResponseError.__type\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"types/types.JSONRPCResponseError.html#__type.error\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCResponseError.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"types/types.JSONRPCResponseError.html#__type.id\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCResponseError.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCError\",\"url\":\"types/types.JSONRPCError.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.JSONRPCError.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.JSONRPCError\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"types/types.JSONRPCError.html#__type.code\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCError.__type\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"types/types.JSONRPCError.html#__type.message\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCError.__type\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"types/types.JSONRPCError.html#__type.data\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCError.__type\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"types/types.JSONRPCError.html#__type.type\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.JSONRPCError.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCRequest\",\"url\":\"types/types.JSONRPCRequest.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"JSONRPCResponse\",\"url\":\"types/types.JSONRPCResponse.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"JSONRPCMessage\",\"url\":\"types/types.JSONRPCMessage.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"HandlerImplementation\",\"url\":\"types/types.HandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.HandlerImplementation.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.HandlerImplementation\"},{\"kind\":4194304,\"name\":\"RawHandlerImplementation\",\"url\":\"types/types.RawHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"DuplexHandlerImplementation\",\"url\":\"types/types.DuplexHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"ServerHandlerImplementation\",\"url\":\"types/types.ServerHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"ClientHandlerImplementation\",\"url\":\"types/types.ClientHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"UnaryHandlerImplementation\",\"url\":\"types/types.UnaryHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"ContainerType\",\"url\":\"types/types.ContainerType.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":256,\"name\":\"RPCStream\",\"url\":\"interfaces/types.RPCStream.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":1024,\"name\":\"cancel\",\"url\":\"interfaces/types.RPCStream.html#cancel\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types.RPCStream\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/types.RPCStream.html#cancel.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"types.RPCStream.cancel\"},{\"kind\":1024,\"name\":\"meta\",\"url\":\"interfaces/types.RPCStream.html#meta\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types.RPCStream\"},{\"kind\":4194304,\"name\":\"StreamFactory\",\"url\":\"types/types.StreamFactory.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.StreamFactory.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.StreamFactory\"},{\"kind\":4194304,\"name\":\"MiddlewareFactory\",\"url\":\"types/types.MiddlewareFactory.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.MiddlewareFactory.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.MiddlewareFactory\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.MiddlewareFactory.html#__type.__type-1.__type-2\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"types.MiddlewareFactory.__type.__type\"},{\"kind\":1024,\"name\":\"forward\",\"url\":\"types/types.MiddlewareFactory.html#__type.__type-1.__type-2.forward\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.MiddlewareFactory.__type.__type.__type\"},{\"kind\":1024,\"name\":\"reverse\",\"url\":\"types/types.MiddlewareFactory.html#__type.__type-1.__type-2.reverse\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.MiddlewareFactory.__type.__type.__type\"},{\"kind\":4194304,\"name\":\"ServerManifest\",\"url\":\"types/types.ServerManifest.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"ClientManifest\",\"url\":\"types/types.ClientManifest.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"HandlerType\",\"url\":\"types/types.HandlerType.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"MapCallers\",\"url\":\"types/types.MapCallers.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"JSONValue\",\"url\":\"types/types.JSONValue.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":4194304,\"name\":\"POJO\",\"url\":\"types/types.POJO.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.POJO.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.POJO\"},{\"kind\":4194304,\"name\":\"PromiseDeconstructed\",\"url\":\"types/types.PromiseDeconstructed.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.PromiseDeconstructed.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"types.PromiseDeconstructed\"},{\"kind\":1024,\"name\":\"p\",\"url\":\"types/types.PromiseDeconstructed.html#__type.p\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.PromiseDeconstructed.__type\"},{\"kind\":1024,\"name\":\"resolveP\",\"url\":\"types/types.PromiseDeconstructed.html#__type.resolveP\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.PromiseDeconstructed.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.PromiseDeconstructed.html#__type.resolveP.__type-3\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"types.PromiseDeconstructed.__type.resolveP\"},{\"kind\":1024,\"name\":\"rejectP\",\"url\":\"types/types.PromiseDeconstructed.html#__type.rejectP\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types.PromiseDeconstructed.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/types.PromiseDeconstructed.html#__type.rejectP.__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"types.PromiseDeconstructed.__type.rejectP\"},{\"kind\":4,\"name\":\"errors\",\"url\":\"modules/errors.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"never\",\"url\":\"functions/errors.never.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":128,\"name\":\"ErrorRPC\",\"url\":\"classes/errors.ErrorRPC.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPC.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPC\"},{\"kind\":1024,\"name\":\"_description\",\"url\":\"classes/errors.ErrorRPC.html#_description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"errors.ErrorRPC\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPC.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPC\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPC.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPC\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPC.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPC\"},{\"kind\":128,\"name\":\"ErrorRPCDestroyed\",\"url\":\"classes/errors.ErrorRPCDestroyed.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCDestroyed.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCDestroyed\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCDestroyed.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCDestroyed\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCDestroyed.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCDestroyed\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCDestroyed.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCDestroyed\"},{\"kind\":128,\"name\":\"ErrorRPCStopping\",\"url\":\"classes/errors.ErrorRPCStopping.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCStopping.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCStopping\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCStopping.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStopping\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCStopping.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStopping\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCStopping.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStopping\"},{\"kind\":128,\"name\":\"ErrorRPCParse\",\"url\":\"classes/errors.ErrorRPCParse.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCParse.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCParse\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCParse.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCParse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCParse.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCParse\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCParse.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCParse\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCParse.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCParse\"},{\"kind\":128,\"name\":\"ErrorRPCHandlerFailed\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCHandlerFailed\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCHandlerFailed\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCHandlerFailed\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCHandlerFailed\"},{\"kind\":128,\"name\":\"ErrorRPCMessageLength\",\"url\":\"classes/errors.ErrorRPCMessageLength.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCMessageLength.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMessageLength\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCMessageLength.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMessageLength\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCMessageLength.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMessageLength\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCMessageLength.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMessageLength\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCMessageLength.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMessageLength\"},{\"kind\":128,\"name\":\"ErrorRPCMissingResponse\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMissingResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMissingResponse\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMissingResponse\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMissingResponse\"},{\"kind\":128,\"name\":\"ErrorRPCOutputStreamError\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCOutputStreamError\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCOutputStreamError\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCOutputStreamError\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCOutputStreamError\"},{\"kind\":128,\"name\":\"ErrorRPCRemote\",\"url\":\"classes/errors.ErrorRPCRemote.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCRemote.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/errors.ErrorRPCRemote.html#message-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":2048,\"name\":\"fromJSON\",\"url\":\"classes/errors.ErrorRPCRemote.html#fromJSON\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCRemote.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":1024,\"name\":\"metadata\",\"url\":\"classes/errors.ErrorRPCRemote.html#metadata\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":2048,\"name\":\"toJSON\",\"url\":\"classes/errors.ErrorRPCRemote.html#toJSON\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCRemote.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCRemote.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCRemote.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":128,\"name\":\"ErrorRPCStreamEnded\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCStreamEnded\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStreamEnded\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStreamEnded\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStreamEnded\"},{\"kind\":128,\"name\":\"ErrorRPCTimedOut\",\"url\":\"classes/errors.ErrorRPCTimedOut.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCTimedOut.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCTimedOut\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCTimedOut.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCTimedOut\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCTimedOut.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCTimedOut\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCTimedOut.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCTimedOut\"},{\"kind\":128,\"name\":\"ErrorUtilsUndefinedBehaviour\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorUtilsUndefinedBehaviour\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorUtilsUndefinedBehaviour\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorUtilsUndefinedBehaviour\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorUtilsUndefinedBehaviour\"},{\"kind\":128,\"name\":\"ErrorRPCMethodNotImplemented\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMethodNotImplemented\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMethodNotImplemented\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMethodNotImplemented\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMethodNotImplemented\"},{\"kind\":128,\"name\":\"ErrorRPCConnectionLocal\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionLocal\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionLocal\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionLocal\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionLocal\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionLocal\"},{\"kind\":128,\"name\":\"ErrorRPCConnectionPeer\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionPeer\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionPeer\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionPeer\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionPeer\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionPeer\"},{\"kind\":128,\"name\":\"ErrorRPCConnectionKeepAliveTimeOut\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionKeepAliveTimeOut\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionKeepAliveTimeOut\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionKeepAliveTimeOut\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionKeepAliveTimeOut\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionKeepAliveTimeOut\"},{\"kind\":128,\"name\":\"ErrorRPCConnectionInternal\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionInternal\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionInternal\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionInternal\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionInternal\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionInternal\"},{\"kind\":128,\"name\":\"ErrorMissingHeader\",\"url\":\"classes/errors.ErrorMissingHeader.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorMissingHeader.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorMissingHeader\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorMissingHeader.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingHeader\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorMissingHeader.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingHeader\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorMissingHeader.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingHeader\"},{\"kind\":128,\"name\":\"ErrorHandlerAborted\",\"url\":\"classes/errors.ErrorHandlerAborted.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorHandlerAborted.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorHandlerAborted\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorHandlerAborted.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorHandlerAborted\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorHandlerAborted.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorHandlerAborted\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorHandlerAborted.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorHandlerAborted\"},{\"kind\":128,\"name\":\"ErrorRPCCallerFailed\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCCallerFailed\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCCallerFailed\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCCallerFailed\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCCallerFailed\"},{\"kind\":128,\"name\":\"ErrorMissingCaller\",\"url\":\"classes/errors.ErrorMissingCaller.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorMissingCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorMissingCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorMissingCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingCaller\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorMissingCaller.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingCaller\"},{\"kind\":262144,\"name\":\"description\",\"url\":\"classes/errors.ErrorMissingCaller.html#description-1\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingCaller\"},{\"kind\":8,\"name\":\"JSONRPCErrorCode\",\"url\":\"enums/errors.JSONRPCErrorCode.html\",\"classes\":\"tsd-kind-enum tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":16,\"name\":\"ParseError\",\"url\":\"enums/errors.JSONRPCErrorCode.html#ParseError\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"InvalidRequest\",\"url\":\"enums/errors.JSONRPCErrorCode.html#InvalidRequest\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"MethodNotFound\",\"url\":\"enums/errors.JSONRPCErrorCode.html#MethodNotFound\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"InvalidParams\",\"url\":\"enums/errors.JSONRPCErrorCode.html#InvalidParams\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"InternalError\",\"url\":\"enums/errors.JSONRPCErrorCode.html#InternalError\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"HandlerNotFound\",\"url\":\"enums/errors.JSONRPCErrorCode.html#HandlerNotFound\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCStopping\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCStopping\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCDestroyed\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCDestroyed\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCMessageLength\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCMessageLength\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCMissingResponse\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCMissingResponse\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCOutputStreamError\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCOutputStreamError\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCRemote\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCRemote\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCStreamEnded\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCStreamEnded\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCTimedOut\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCTimedOut\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCConnectionLocal\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCConnectionLocal\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCConnectionPeer\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCConnectionPeer\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCConnectionKeepAliveTimeOut\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCConnectionKeepAliveTimeOut\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCConnectionInternal\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCConnectionInternal\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"MissingHeader\",\"url\":\"enums/errors.JSONRPCErrorCode.html#MissingHeader\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"HandlerAborted\",\"url\":\"enums/errors.JSONRPCErrorCode.html#HandlerAborted\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"MissingCaller\",\"url\":\"enums/errors.JSONRPCErrorCode.html#MissingCaller\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":4,\"name\":\"events\",\"url\":\"modules/events.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":128,\"name\":\"RPCErrorEvent\",\"url\":\"classes/events.RPCErrorEvent.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/events.RPCErrorEvent.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"events.RPCErrorEvent\"},{\"kind\":1024,\"name\":\"detail\",\"url\":\"classes/events.RPCErrorEvent.html#detail\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"events.RPCErrorEvent\"},{\"kind\":128,\"name\":\"EventRPC\",\"url\":\"classes/events.EventRPC.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCClient\",\"url\":\"classes/events.EventRPCClient.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServer\",\"url\":\"classes/events.EventRPCServer.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCConnection\",\"url\":\"classes/events.EventRPCConnection.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCClientDestroy\",\"url\":\"classes/events.EventRPCClientDestroy.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCClientDestroyed\",\"url\":\"classes/events.EventRPCClientDestroyed.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCClientCreate\",\"url\":\"classes/events.EventRPCClientCreate.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCClientCreated\",\"url\":\"classes/events.EventRPCClientCreated.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCClientError\",\"url\":\"classes/events.EventRPCClientError.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCClientConnect\",\"url\":\"classes/events.EventRPCClientConnect.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerConnection\",\"url\":\"classes/events.EventRPCServerConnection.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerCreate\",\"url\":\"classes/events.EventRPCServerCreate.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerCreated\",\"url\":\"classes/events.EventRPCServerCreated.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerDestroy\",\"url\":\"classes/events.EventRPCServerDestroy.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerDestroyed\",\"url\":\"classes/events.EventRPCServerDestroyed.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerError\",\"url\":\"classes/events.EventRPCServerError.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCConnectionError\",\"url\":\"classes/events.EventRPCConnectionError.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":4,\"name\":\"handlers\",\"url\":\"modules/handlers.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":128,\"name\":\"Handler\",\"url\":\"classes/handlers.Handler.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"handlers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/handlers.Handler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"handlers.Handler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/handlers.Handler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"handlers.Handler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/handlers.Handler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"handlers.Handler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/handlers.Handler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"handlers.Handler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/handlers.Handler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"handlers.Handler\"},{\"kind\":128,\"name\":\"ClientHandler\",\"url\":\"classes/handlers.ClientHandler.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"handlers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/handlers.ClientHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.ClientHandler\"},{\"kind\":2048,\"name\":\"handle\",\"url\":\"classes/handlers.ClientHandler.html#handle\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"handlers.ClientHandler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/handlers.ClientHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.ClientHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/handlers.ClientHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.ClientHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/handlers.ClientHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.ClientHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/handlers.ClientHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.ClientHandler\"},{\"kind\":128,\"name\":\"DuplexHandler\",\"url\":\"classes/handlers.DuplexHandler.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"handlers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/handlers.DuplexHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.DuplexHandler\"},{\"kind\":1024,\"name\":\"handle\",\"url\":\"classes/handlers.DuplexHandler.html#handle\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"handlers.DuplexHandler\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/handlers.DuplexHandler.html#handle.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"handlers.DuplexHandler.handle\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/handlers.DuplexHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.DuplexHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/handlers.DuplexHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.DuplexHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/handlers.DuplexHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.DuplexHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/handlers.DuplexHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.DuplexHandler\"},{\"kind\":128,\"name\":\"RawHandler\",\"url\":\"classes/handlers.RawHandler.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"handlers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/handlers.RawHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.RawHandler\"},{\"kind\":2048,\"name\":\"handle\",\"url\":\"classes/handlers.RawHandler.html#handle\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"handlers.RawHandler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/handlers.RawHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.RawHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/handlers.RawHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.RawHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/handlers.RawHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.RawHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/handlers.RawHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.RawHandler\"},{\"kind\":128,\"name\":\"ServerHandler\",\"url\":\"classes/handlers.ServerHandler.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"handlers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/handlers.ServerHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.ServerHandler\"},{\"kind\":1024,\"name\":\"handle\",\"url\":\"classes/handlers.ServerHandler.html#handle\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"handlers.ServerHandler\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/handlers.ServerHandler.html#handle.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"handlers.ServerHandler.handle\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/handlers.ServerHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.ServerHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/handlers.ServerHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.ServerHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/handlers.ServerHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.ServerHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/handlers.ServerHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.ServerHandler\"},{\"kind\":128,\"name\":\"UnaryHandler\",\"url\":\"classes/handlers.UnaryHandler.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"handlers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/handlers.UnaryHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.UnaryHandler\"},{\"kind\":2048,\"name\":\"handle\",\"url\":\"classes/handlers.UnaryHandler.html#handle\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"handlers.UnaryHandler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/handlers.UnaryHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.UnaryHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/handlers.UnaryHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.UnaryHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/handlers.UnaryHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"handlers.UnaryHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/handlers.UnaryHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"handlers.UnaryHandler\"},{\"kind\":4,\"name\":\"callers\",\"url\":\"modules/callers.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":128,\"name\":\"Caller\",\"url\":\"classes/callers.Caller.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"callers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/callers.Caller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"callers.Caller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/callers.Caller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"callers.Caller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/callers.Caller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"callers.Caller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/callers.Caller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"callers.Caller\"},{\"kind\":128,\"name\":\"ClientCaller\",\"url\":\"classes/callers.ClientCaller.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"callers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/callers.ClientCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"callers.ClientCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/callers.ClientCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"callers.ClientCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/callers.ClientCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.ClientCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/callers.ClientCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.ClientCaller\"},{\"kind\":128,\"name\":\"DuplexCaller\",\"url\":\"classes/callers.DuplexCaller.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"callers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/callers.DuplexCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"callers.DuplexCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/callers.DuplexCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"callers.DuplexCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/callers.DuplexCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.DuplexCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/callers.DuplexCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.DuplexCaller\"},{\"kind\":128,\"name\":\"RawCaller\",\"url\":\"classes/callers.RawCaller.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"callers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/callers.RawCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"callers.RawCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/callers.RawCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"callers.RawCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/callers.RawCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.RawCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/callers.RawCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.RawCaller\"},{\"kind\":128,\"name\":\"ServerCaller\",\"url\":\"classes/callers.ServerCaller.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"callers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/callers.ServerCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"callers.ServerCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/callers.ServerCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"callers.ServerCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/callers.ServerCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.ServerCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/callers.ServerCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.ServerCaller\"},{\"kind\":128,\"name\":\"UnaryCaller\",\"url\":\"classes/callers.UnaryCaller.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"callers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/callers.UnaryCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"callers.UnaryCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/callers.UnaryCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"callers.UnaryCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/callers.UnaryCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.UnaryCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/callers.UnaryCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"callers.UnaryCaller\"},{\"kind\":4,\"name\":\"middleware\",\"url\":\"modules/middleware.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"binaryToJsonMessageStream\",\"url\":\"functions/middleware.binaryToJsonMessageStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"},{\"kind\":64,\"name\":\"jsonMessageToBinaryStream\",\"url\":\"functions/middleware.jsonMessageToBinaryStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"},{\"kind\":64,\"name\":\"defaultMiddleware\",\"url\":\"functions/middleware.defaultMiddleware.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/middleware.defaultMiddleware.html#defaultMiddleware.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"middleware.defaultMiddleware.defaultMiddleware\"},{\"kind\":1024,\"name\":\"forward\",\"url\":\"functions/middleware.defaultMiddleware.html#defaultMiddleware.__type.forward\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"middleware.defaultMiddleware.defaultMiddleware.__type\"},{\"kind\":1024,\"name\":\"reverse\",\"url\":\"functions/middleware.defaultMiddleware.html#defaultMiddleware.__type.reverse\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"middleware.defaultMiddleware.defaultMiddleware.__type\"},{\"kind\":64,\"name\":\"defaultServerMiddlewareWrapper\",\"url\":\"functions/middleware.defaultServerMiddlewareWrapper.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"},{\"kind\":64,\"name\":\"defaultClientMiddlewareWrapper\",\"url\":\"functions/middleware.defaultClientMiddlewareWrapper.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,55.321]],[\"comment/0\",[]],[\"name/1\",[1,55.321]],[\"comment/1\",[]],[\"name/2\",[2,23.402]],[\"comment/2\",[]],[\"name/3\",[3,50.212]],[\"comment/3\",[]],[\"name/4\",[4,26.989]],[\"comment/4\",[]],[\"name/5\",[5,46.848]],[\"comment/5\",[]],[\"name/6\",[6,50.212]],[\"comment/6\",[]],[\"name/7\",[7,50.212]],[\"comment/7\",[]],[\"name/8\",[8,46.848]],[\"comment/8\",[]],[\"name/9\",[9,55.321]],[\"comment/9\",[]],[\"name/10\",[10,50.212]],[\"comment/10\",[]],[\"name/11\",[11,55.321]],[\"comment/11\",[]],[\"name/12\",[12,55.321]],[\"comment/12\",[]],[\"name/13\",[4,26.989]],[\"comment/13\",[]],[\"name/14\",[13,50.212]],[\"comment/14\",[]],[\"name/15\",[14,55.321]],[\"comment/15\",[]],[\"name/16\",[15,50.212]],[\"comment/16\",[]],[\"name/17\",[16,55.321]],[\"comment/17\",[]],[\"name/18\",[17,55.321]],[\"comment/18\",[]],[\"name/19\",[18,55.321]],[\"comment/19\",[]],[\"name/20\",[19,55.321]],[\"comment/20\",[]],[\"name/21\",[20,55.321]],[\"comment/21\",[]],[\"name/22\",[21,55.321]],[\"comment/22\",[]],[\"name/23\",[2,23.402]],[\"comment/23\",[]],[\"name/24\",[3,50.212]],[\"comment/24\",[]],[\"name/25\",[4,26.989]],[\"comment/25\",[]],[\"name/26\",[5,46.848]],[\"comment/26\",[]],[\"name/27\",[6,50.212]],[\"comment/27\",[]],[\"name/28\",[22,55.321]],[\"comment/28\",[]],[\"name/29\",[23,55.321]],[\"comment/29\",[]],[\"name/30\",[24,55.321]],[\"comment/30\",[]],[\"name/31\",[25,55.321]],[\"comment/31\",[]],[\"name/32\",[26,50.212]],[\"comment/32\",[]],[\"name/33\",[4,26.989]],[\"comment/33\",[]],[\"name/34\",[27,50.212]],[\"comment/34\",[]],[\"name/35\",[4,26.989]],[\"comment/35\",[]],[\"name/36\",[28,50.212]],[\"comment/36\",[]],[\"name/37\",[4,26.989]],[\"comment/37\",[]],[\"name/38\",[8,46.848]],[\"comment/38\",[]],[\"name/39\",[10,50.212]],[\"comment/39\",[]],[\"name/40\",[13,50.212]],[\"comment/40\",[]],[\"name/41\",[29,55.321]],[\"comment/41\",[]],[\"name/42\",[30,55.321]],[\"comment/42\",[]],[\"name/43\",[31,55.321]],[\"comment/43\",[]],[\"name/44\",[32,55.321]],[\"comment/44\",[]],[\"name/45\",[33,55.321]],[\"comment/45\",[]],[\"name/46\",[34,55.321]],[\"comment/46\",[]],[\"name/47\",[35,55.321]],[\"comment/47\",[]],[\"name/48\",[36,55.321]],[\"comment/48\",[]],[\"name/49\",[37,55.321]],[\"comment/49\",[]],[\"name/50\",[38,55.321]],[\"comment/50\",[]],[\"name/51\",[39,55.321]],[\"comment/51\",[]],[\"name/52\",[40,55.321]],[\"comment/52\",[]],[\"name/53\",[41,55.321]],[\"comment/53\",[]],[\"name/54\",[42,55.321]],[\"comment/54\",[]],[\"name/55\",[27,50.212]],[\"comment/55\",[]],[\"name/56\",[4,26.989]],[\"comment/56\",[]],[\"name/57\",[26,50.212]],[\"comment/57\",[]],[\"name/58\",[28,50.212]],[\"comment/58\",[]],[\"name/59\",[43,55.321]],[\"comment/59\",[]],[\"name/60\",[44,55.321]],[\"comment/60\",[]],[\"name/61\",[45,55.321]],[\"comment/61\",[]],[\"name/62\",[46,55.321]],[\"comment/62\",[]],[\"name/63\",[47,55.321]],[\"comment/63\",[]],[\"name/64\",[48,55.321]],[\"comment/64\",[]],[\"name/65\",[49,55.321]],[\"comment/65\",[]],[\"name/66\",[50,55.321]],[\"comment/66\",[]],[\"name/67\",[5,46.848]],[\"comment/67\",[]],[\"name/68\",[4,26.989]],[\"comment/68\",[]],[\"name/69\",[51,55.321]],[\"comment/69\",[]],[\"name/70\",[4,26.989]],[\"comment/70\",[]],[\"name/71\",[52,44.335]],[\"comment/71\",[]],[\"name/72\",[53,50.212]],[\"comment/72\",[]],[\"name/73\",[54,50.212]],[\"comment/73\",[]],[\"name/74\",[55,46.848]],[\"comment/74\",[]],[\"name/75\",[56,55.321]],[\"comment/75\",[]],[\"name/76\",[4,26.989]],[\"comment/76\",[]],[\"name/77\",[52,44.335]],[\"comment/77\",[]],[\"name/78\",[53,50.212]],[\"comment/78\",[]],[\"name/79\",[54,50.212]],[\"comment/79\",[]],[\"name/80\",[57,55.321]],[\"comment/80\",[]],[\"name/81\",[4,26.989]],[\"comment/81\",[]],[\"name/82\",[52,44.335]],[\"comment/82\",[]],[\"name/83\",[58,55.321]],[\"comment/83\",[]],[\"name/84\",[55,46.848]],[\"comment/84\",[]],[\"name/85\",[59,55.321]],[\"comment/85\",[]],[\"name/86\",[4,26.989]],[\"comment/86\",[]],[\"name/87\",[52,44.335]],[\"comment/87\",[]],[\"name/88\",[60,55.321]],[\"comment/88\",[]],[\"name/89\",[55,46.848]],[\"comment/89\",[]],[\"name/90\",[61,55.321]],[\"comment/90\",[]],[\"name/91\",[4,26.989]],[\"comment/91\",[]],[\"name/92\",[62,28.24]],[\"comment/92\",[]],[\"name/93\",[63,50.212]],[\"comment/93\",[]],[\"name/94\",[64,55.321]],[\"comment/94\",[]],[\"name/95\",[65,25.876]],[\"comment/95\",[]],[\"name/96\",[66,55.321]],[\"comment/96\",[]],[\"name/97\",[67,55.321]],[\"comment/97\",[]],[\"name/98\",[68,55.321]],[\"comment/98\",[]],[\"name/99\",[69,55.321]],[\"comment/99\",[]],[\"name/100\",[4,26.989]],[\"comment/100\",[]],[\"name/101\",[70,55.321]],[\"comment/101\",[]],[\"name/102\",[71,55.321]],[\"comment/102\",[]],[\"name/103\",[72,55.321]],[\"comment/103\",[]],[\"name/104\",[73,55.321]],[\"comment/104\",[]],[\"name/105\",[74,55.321]],[\"comment/105\",[]],[\"name/106\",[75,55.321]],[\"comment/106\",[]],[\"name/107\",[76,55.321]],[\"comment/107\",[]],[\"name/108\",[77,55.321]],[\"comment/108\",[]],[\"name/109\",[4,26.989]],[\"comment/109\",[]],[\"name/110\",[78,55.321]],[\"comment/110\",[]],[\"name/111\",[7,50.212]],[\"comment/111\",[]],[\"name/112\",[4,26.989]],[\"comment/112\",[]],[\"name/113\",[8,46.848]],[\"comment/113\",[]],[\"name/114\",[4,26.989]],[\"comment/114\",[]],[\"name/115\",[4,26.989]],[\"comment/115\",[]],[\"name/116\",[79,50.212]],[\"comment/116\",[]],[\"name/117\",[80,50.212]],[\"comment/117\",[]],[\"name/118\",[81,55.321]],[\"comment/118\",[]],[\"name/119\",[82,55.321]],[\"comment/119\",[]],[\"name/120\",[83,55.321]],[\"comment/120\",[]],[\"name/121\",[84,55.321]],[\"comment/121\",[]],[\"name/122\",[85,55.321]],[\"comment/122\",[]],[\"name/123\",[86,55.321]],[\"comment/123\",[]],[\"name/124\",[4,26.989]],[\"comment/124\",[]],[\"name/125\",[87,55.321]],[\"comment/125\",[]],[\"name/126\",[4,26.989]],[\"comment/126\",[]],[\"name/127\",[88,55.321]],[\"comment/127\",[]],[\"name/128\",[89,55.321]],[\"comment/128\",[]],[\"name/129\",[4,26.989]],[\"comment/129\",[]],[\"name/130\",[90,55.321]],[\"comment/130\",[]],[\"name/131\",[4,26.989]],[\"comment/131\",[]],[\"name/132\",[91,55.321]],[\"comment/132\",[]],[\"name/133\",[92,55.321]],[\"comment/133\",[]],[\"name/134\",[93,55.321]],[\"comment/134\",[]],[\"name/135\",[2,23.402]],[\"comment/135\",[]],[\"name/136\",[94,55.321]],[\"comment/136\",[]],[\"name/137\",[65,25.876]],[\"comment/137\",[]],[\"name/138\",[62,28.24]],[\"comment/138\",[]],[\"name/139\",[95,25.876]],[\"comment/139\",[]],[\"name/140\",[96,55.321]],[\"comment/140\",[]],[\"name/141\",[2,23.402]],[\"comment/141\",[]],[\"name/142\",[65,25.876]],[\"comment/142\",[]],[\"name/143\",[62,28.24]],[\"comment/143\",[]],[\"name/144\",[95,25.876]],[\"comment/144\",[]],[\"name/145\",[97,55.321]],[\"comment/145\",[]],[\"name/146\",[2,23.402]],[\"comment/146\",[]],[\"name/147\",[65,25.876]],[\"comment/147\",[]],[\"name/148\",[62,28.24]],[\"comment/148\",[]],[\"name/149\",[95,25.876]],[\"comment/149\",[]],[\"name/150\",[98,55.321]],[\"comment/150\",[]],[\"name/151\",[95,25.876]],[\"comment/151\",[]],[\"name/152\",[2,23.402]],[\"comment/152\",[]],[\"name/153\",[65,25.876]],[\"comment/153\",[]],[\"name/154\",[62,28.24]],[\"comment/154\",[]],[\"name/155\",[95,25.876]],[\"comment/155\",[]],[\"name/156\",[99,55.321]],[\"comment/156\",[]],[\"name/157\",[2,23.402]],[\"comment/157\",[]],[\"name/158\",[65,25.876]],[\"comment/158\",[]],[\"name/159\",[62,28.24]],[\"comment/159\",[]],[\"name/160\",[95,25.876]],[\"comment/160\",[]],[\"name/161\",[100,55.321]],[\"comment/161\",[]],[\"name/162\",[95,25.876]],[\"comment/162\",[]],[\"name/163\",[2,23.402]],[\"comment/163\",[]],[\"name/164\",[62,28.24]],[\"comment/164\",[]],[\"name/165\",[65,25.876]],[\"comment/165\",[]],[\"name/166\",[95,25.876]],[\"comment/166\",[]],[\"name/167\",[101,55.321]],[\"comment/167\",[]],[\"name/168\",[2,23.402]],[\"comment/168\",[]],[\"name/169\",[65,25.876]],[\"comment/169\",[]],[\"name/170\",[62,28.24]],[\"comment/170\",[]],[\"name/171\",[95,25.876]],[\"comment/171\",[]],[\"name/172\",[102,55.321]],[\"comment/172\",[]],[\"name/173\",[2,23.402]],[\"comment/173\",[]],[\"name/174\",[65,25.876]],[\"comment/174\",[]],[\"name/175\",[62,28.24]],[\"comment/175\",[]],[\"name/176\",[95,25.876]],[\"comment/176\",[]],[\"name/177\",[103,55.321]],[\"comment/177\",[]],[\"name/178\",[95,25.876]],[\"comment/178\",[]],[\"name/179\",[63,50.212]],[\"comment/179\",[]],[\"name/180\",[104,55.321]],[\"comment/180\",[]],[\"name/181\",[2,23.402]],[\"comment/181\",[]],[\"name/182\",[105,55.321]],[\"comment/182\",[]],[\"name/183\",[106,55.321]],[\"comment/183\",[]],[\"name/184\",[65,25.876]],[\"comment/184\",[]],[\"name/185\",[62,28.24]],[\"comment/185\",[]],[\"name/186\",[95,25.876]],[\"comment/186\",[]],[\"name/187\",[107,55.321]],[\"comment/187\",[]],[\"name/188\",[2,23.402]],[\"comment/188\",[]],[\"name/189\",[65,25.876]],[\"comment/189\",[]],[\"name/190\",[62,28.24]],[\"comment/190\",[]],[\"name/191\",[95,25.876]],[\"comment/191\",[]],[\"name/192\",[108,55.321]],[\"comment/192\",[]],[\"name/193\",[2,23.402]],[\"comment/193\",[]],[\"name/194\",[65,25.876]],[\"comment/194\",[]],[\"name/195\",[62,28.24]],[\"comment/195\",[]],[\"name/196\",[95,25.876]],[\"comment/196\",[]],[\"name/197\",[109,55.321]],[\"comment/197\",[]],[\"name/198\",[2,23.402]],[\"comment/198\",[]],[\"name/199\",[65,25.876]],[\"comment/199\",[]],[\"name/200\",[62,28.24]],[\"comment/200\",[]],[\"name/201\",[95,25.876]],[\"comment/201\",[]],[\"name/202\",[110,55.321]],[\"comment/202\",[]],[\"name/203\",[2,23.402]],[\"comment/203\",[]],[\"name/204\",[65,25.876]],[\"comment/204\",[]],[\"name/205\",[62,28.24]],[\"comment/205\",[]],[\"name/206\",[95,25.876]],[\"comment/206\",[]],[\"name/207\",[111,55.321]],[\"comment/207\",[]],[\"name/208\",[95,25.876]],[\"comment/208\",[]],[\"name/209\",[2,23.402]],[\"comment/209\",[]],[\"name/210\",[62,28.24]],[\"comment/210\",[]],[\"name/211\",[65,25.876]],[\"comment/211\",[]],[\"name/212\",[95,25.876]],[\"comment/212\",[]],[\"name/213\",[112,55.321]],[\"comment/213\",[]],[\"name/214\",[95,25.876]],[\"comment/214\",[]],[\"name/215\",[2,23.402]],[\"comment/215\",[]],[\"name/216\",[62,28.24]],[\"comment/216\",[]],[\"name/217\",[65,25.876]],[\"comment/217\",[]],[\"name/218\",[95,25.876]],[\"comment/218\",[]],[\"name/219\",[113,55.321]],[\"comment/219\",[]],[\"name/220\",[95,25.876]],[\"comment/220\",[]],[\"name/221\",[2,23.402]],[\"comment/221\",[]],[\"name/222\",[62,28.24]],[\"comment/222\",[]],[\"name/223\",[65,25.876]],[\"comment/223\",[]],[\"name/224\",[95,25.876]],[\"comment/224\",[]],[\"name/225\",[114,55.321]],[\"comment/225\",[]],[\"name/226\",[95,25.876]],[\"comment/226\",[]],[\"name/227\",[2,23.402]],[\"comment/227\",[]],[\"name/228\",[62,28.24]],[\"comment/228\",[]],[\"name/229\",[65,25.876]],[\"comment/229\",[]],[\"name/230\",[95,25.876]],[\"comment/230\",[]],[\"name/231\",[115,55.321]],[\"comment/231\",[]],[\"name/232\",[2,23.402]],[\"comment/232\",[]],[\"name/233\",[65,25.876]],[\"comment/233\",[]],[\"name/234\",[62,28.24]],[\"comment/234\",[]],[\"name/235\",[95,25.876]],[\"comment/235\",[]],[\"name/236\",[116,55.321]],[\"comment/236\",[]],[\"name/237\",[2,23.402]],[\"comment/237\",[]],[\"name/238\",[65,25.876]],[\"comment/238\",[]],[\"name/239\",[62,28.24]],[\"comment/239\",[]],[\"name/240\",[95,25.876]],[\"comment/240\",[]],[\"name/241\",[117,55.321]],[\"comment/241\",[]],[\"name/242\",[2,23.402]],[\"comment/242\",[]],[\"name/243\",[65,25.876]],[\"comment/243\",[]],[\"name/244\",[62,28.24]],[\"comment/244\",[]],[\"name/245\",[95,25.876]],[\"comment/245\",[]],[\"name/246\",[118,55.321]],[\"comment/246\",[]],[\"name/247\",[2,23.402]],[\"comment/247\",[]],[\"name/248\",[65,25.876]],[\"comment/248\",[]],[\"name/249\",[62,28.24]],[\"comment/249\",[]],[\"name/250\",[95,25.876]],[\"comment/250\",[]],[\"name/251\",[119,55.321]],[\"comment/251\",[]],[\"name/252\",[120,55.321]],[\"comment/252\",[]],[\"name/253\",[121,55.321]],[\"comment/253\",[]],[\"name/254\",[122,55.321]],[\"comment/254\",[]],[\"name/255\",[123,55.321]],[\"comment/255\",[]],[\"name/256\",[124,55.321]],[\"comment/256\",[]],[\"name/257\",[125,55.321]],[\"comment/257\",[]],[\"name/258\",[126,55.321]],[\"comment/258\",[]],[\"name/259\",[127,55.321]],[\"comment/259\",[]],[\"name/260\",[128,55.321]],[\"comment/260\",[]],[\"name/261\",[129,55.321]],[\"comment/261\",[]],[\"name/262\",[130,55.321]],[\"comment/262\",[]],[\"name/263\",[131,55.321]],[\"comment/263\",[]],[\"name/264\",[132,55.321]],[\"comment/264\",[]],[\"name/265\",[133,55.321]],[\"comment/265\",[]],[\"name/266\",[134,55.321]],[\"comment/266\",[]],[\"name/267\",[135,55.321]],[\"comment/267\",[]],[\"name/268\",[136,55.321]],[\"comment/268\",[]],[\"name/269\",[137,55.321]],[\"comment/269\",[]],[\"name/270\",[138,55.321]],[\"comment/270\",[]],[\"name/271\",[139,55.321]],[\"comment/271\",[]],[\"name/272\",[140,55.321]],[\"comment/272\",[]],[\"name/273\",[141,55.321]],[\"comment/273\",[]],[\"name/274\",[142,55.321]],[\"comment/274\",[]],[\"name/275\",[2,23.402]],[\"comment/275\",[]],[\"name/276\",[143,55.321]],[\"comment/276\",[]],[\"name/277\",[144,55.321]],[\"comment/277\",[]],[\"name/278\",[145,55.321]],[\"comment/278\",[]],[\"name/279\",[146,55.321]],[\"comment/279\",[]],[\"name/280\",[147,55.321]],[\"comment/280\",[]],[\"name/281\",[148,55.321]],[\"comment/281\",[]],[\"name/282\",[149,55.321]],[\"comment/282\",[]],[\"name/283\",[150,55.321]],[\"comment/283\",[]],[\"name/284\",[151,55.321]],[\"comment/284\",[]],[\"name/285\",[152,55.321]],[\"comment/285\",[]],[\"name/286\",[153,55.321]],[\"comment/286\",[]],[\"name/287\",[154,55.321]],[\"comment/287\",[]],[\"name/288\",[155,55.321]],[\"comment/288\",[]],[\"name/289\",[156,55.321]],[\"comment/289\",[]],[\"name/290\",[157,55.321]],[\"comment/290\",[]],[\"name/291\",[158,55.321]],[\"comment/291\",[]],[\"name/292\",[159,55.321]],[\"comment/292\",[]],[\"name/293\",[160,55.321]],[\"comment/293\",[]],[\"name/294\",[161,55.321]],[\"comment/294\",[]],[\"name/295\",[162,55.321]],[\"comment/295\",[]],[\"name/296\",[2,23.402]],[\"comment/296\",[]],[\"name/297\",[163,34.118]],[\"comment/297\",[]],[\"name/298\",[164,34.118]],[\"comment/298\",[]],[\"name/299\",[165,40.657]],[\"comment/299\",[]],[\"name/300\",[166,40.657]],[\"comment/300\",[]],[\"name/301\",[167,55.321]],[\"comment/301\",[]],[\"name/302\",[2,23.402]],[\"comment/302\",[]],[\"name/303\",[168,42.328]],[\"comment/303\",[]],[\"name/304\",[163,34.118]],[\"comment/304\",[]],[\"name/305\",[164,34.118]],[\"comment/305\",[]],[\"name/306\",[165,40.657]],[\"comment/306\",[]],[\"name/307\",[166,40.657]],[\"comment/307\",[]],[\"name/308\",[169,55.321]],[\"comment/308\",[]],[\"name/309\",[2,23.402]],[\"comment/309\",[]],[\"name/310\",[168,42.328]],[\"comment/310\",[]],[\"name/311\",[4,26.989]],[\"comment/311\",[]],[\"name/312\",[163,34.118]],[\"comment/312\",[]],[\"name/313\",[164,34.118]],[\"comment/313\",[]],[\"name/314\",[165,40.657]],[\"comment/314\",[]],[\"name/315\",[166,40.657]],[\"comment/315\",[]],[\"name/316\",[170,55.321]],[\"comment/316\",[]],[\"name/317\",[2,23.402]],[\"comment/317\",[]],[\"name/318\",[168,42.328]],[\"comment/318\",[]],[\"name/319\",[163,34.118]],[\"comment/319\",[]],[\"name/320\",[164,34.118]],[\"comment/320\",[]],[\"name/321\",[165,40.657]],[\"comment/321\",[]],[\"name/322\",[166,40.657]],[\"comment/322\",[]],[\"name/323\",[171,55.321]],[\"comment/323\",[]],[\"name/324\",[2,23.402]],[\"comment/324\",[]],[\"name/325\",[168,42.328]],[\"comment/325\",[]],[\"name/326\",[4,26.989]],[\"comment/326\",[]],[\"name/327\",[163,34.118]],[\"comment/327\",[]],[\"name/328\",[164,34.118]],[\"comment/328\",[]],[\"name/329\",[165,40.657]],[\"comment/329\",[]],[\"name/330\",[166,40.657]],[\"comment/330\",[]],[\"name/331\",[172,55.321]],[\"comment/331\",[]],[\"name/332\",[2,23.402]],[\"comment/332\",[]],[\"name/333\",[168,42.328]],[\"comment/333\",[]],[\"name/334\",[163,34.118]],[\"comment/334\",[]],[\"name/335\",[164,34.118]],[\"comment/335\",[]],[\"name/336\",[165,40.657]],[\"comment/336\",[]],[\"name/337\",[166,40.657]],[\"comment/337\",[]],[\"name/338\",[173,55.321]],[\"comment/338\",[]],[\"name/339\",[174,55.321]],[\"comment/339\",[]],[\"name/340\",[2,23.402]],[\"comment/340\",[]],[\"name/341\",[163,34.118]],[\"comment/341\",[]],[\"name/342\",[164,34.118]],[\"comment/342\",[]],[\"name/343\",[65,25.876]],[\"comment/343\",[]],[\"name/344\",[175,55.321]],[\"comment/344\",[]],[\"name/345\",[2,23.402]],[\"comment/345\",[]],[\"name/346\",[65,25.876]],[\"comment/346\",[]],[\"name/347\",[163,34.118]],[\"comment/347\",[]],[\"name/348\",[164,34.118]],[\"comment/348\",[]],[\"name/349\",[176,55.321]],[\"comment/349\",[]],[\"name/350\",[2,23.402]],[\"comment/350\",[]],[\"name/351\",[65,25.876]],[\"comment/351\",[]],[\"name/352\",[163,34.118]],[\"comment/352\",[]],[\"name/353\",[164,34.118]],[\"comment/353\",[]],[\"name/354\",[177,55.321]],[\"comment/354\",[]],[\"name/355\",[2,23.402]],[\"comment/355\",[]],[\"name/356\",[65,25.876]],[\"comment/356\",[]],[\"name/357\",[163,34.118]],[\"comment/357\",[]],[\"name/358\",[164,34.118]],[\"comment/358\",[]],[\"name/359\",[178,55.321]],[\"comment/359\",[]],[\"name/360\",[2,23.402]],[\"comment/360\",[]],[\"name/361\",[65,25.876]],[\"comment/361\",[]],[\"name/362\",[163,34.118]],[\"comment/362\",[]],[\"name/363\",[164,34.118]],[\"comment/363\",[]],[\"name/364\",[15,50.212]],[\"comment/364\",[]],[\"name/365\",[2,23.402]],[\"comment/365\",[]],[\"name/366\",[65,25.876]],[\"comment/366\",[]],[\"name/367\",[163,34.118]],[\"comment/367\",[]],[\"name/368\",[164,34.118]],[\"comment/368\",[]],[\"name/369\",[179,55.321]],[\"comment/369\",[]],[\"name/370\",[180,55.321]],[\"comment/370\",[]],[\"name/371\",[181,55.321]],[\"comment/371\",[]],[\"name/372\",[182,55.321]],[\"comment/372\",[]],[\"name/373\",[4,26.989]],[\"comment/373\",[]],[\"name/374\",[79,50.212]],[\"comment/374\",[]],[\"name/375\",[80,50.212]],[\"comment/375\",[]],[\"name/376\",[183,55.321]],[\"comment/376\",[]],[\"name/377\",[184,55.321]],[\"comment/377\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":4,\"name\":{\"4\":{},\"13\":{},\"25\":{},\"33\":{},\"35\":{},\"37\":{},\"56\":{},\"68\":{},\"70\":{},\"76\":{},\"81\":{},\"86\":{},\"91\":{},\"100\":{},\"109\":{},\"112\":{},\"114\":{},\"115\":{},\"124\":{},\"126\":{},\"129\":{},\"131\":{},\"311\":{},\"326\":{},\"373\":{}},\"comment\":{}}],[\"_description\",{\"_index\":94,\"name\":{\"136\":{}},\"comment\":{}}],[\"_inputtype\",{\"_index\":163,\"name\":{\"297\":{},\"304\":{},\"312\":{},\"319\":{},\"327\":{},\"334\":{},\"341\":{},\"347\":{},\"352\":{},\"357\":{},\"362\":{},\"367\":{}},\"comment\":{}}],[\"_outputtype\",{\"_index\":164,\"name\":{\"298\":{},\"305\":{},\"313\":{},\"320\":{},\"328\":{},\"335\":{},\"342\":{},\"348\":{},\"353\":{},\"358\":{},\"363\":{},\"368\":{}},\"comment\":{}}],[\"activestreams\",{\"_index\":25,\"name\":{\"31\":{}},\"comment\":{}}],[\"binarytojsonmessagestream\",{\"_index\":180,\"name\":{\"370\":{}},\"comment\":{}}],[\"caller\",{\"_index\":174,\"name\":{\"339\":{}},\"comment\":{}}],[\"callers\",{\"_index\":173,\"name\":{\"338\":{}},\"comment\":{}}],[\"callertypes\",{\"_index\":9,\"name\":{\"9\":{}},\"comment\":{}}],[\"cancel\",{\"_index\":77,\"name\":{\"108\":{}},\"comment\":{}}],[\"clientcaller\",{\"_index\":175,\"name\":{\"344\":{}},\"comment\":{}}],[\"clienthandler\",{\"_index\":167,\"name\":{\"301\":{}},\"comment\":{}}],[\"clienthandlerimplementation\",{\"_index\":73,\"name\":{\"104\":{}},\"comment\":{}}],[\"clientinputtransformstream\",{\"_index\":43,\"name\":{\"59\":{}},\"comment\":{}}],[\"clientmanifest\",{\"_index\":82,\"name\":{\"119\":{}},\"comment\":{}}],[\"clientoutputtransformstream\",{\"_index\":44,\"name\":{\"60\":{}},\"comment\":{}}],[\"clientstreamcaller\",{\"_index\":17,\"name\":{\"18\":{}},\"comment\":{}}],[\"code\",{\"_index\":62,\"name\":{\"92\":{},\"138\":{},\"143\":{},\"148\":{},\"154\":{},\"159\":{},\"164\":{},\"170\":{},\"175\":{},\"185\":{},\"190\":{},\"195\":{},\"200\":{},\"205\":{},\"210\":{},\"216\":{},\"222\":{},\"228\":{},\"234\":{},\"239\":{},\"244\":{},\"249\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":2,\"name\":{\"2\":{},\"23\":{},\"135\":{},\"141\":{},\"146\":{},\"152\":{},\"157\":{},\"163\":{},\"168\":{},\"173\":{},\"181\":{},\"188\":{},\"193\":{},\"198\":{},\"203\":{},\"209\":{},\"215\":{},\"221\":{},\"227\":{},\"232\":{},\"237\":{},\"242\":{},\"247\":{},\"275\":{},\"296\":{},\"302\":{},\"309\":{},\"317\":{},\"324\":{},\"332\":{},\"340\":{},\"345\":{},\"350\":{},\"355\":{},\"360\":{},\"365\":{}},\"comment\":{}}],[\"container\",{\"_index\":166,\"name\":{\"300\":{},\"307\":{},\"315\":{},\"322\":{},\"330\":{},\"337\":{}},\"comment\":{}}],[\"containertype\",{\"_index\":75,\"name\":{\"106\":{}},\"comment\":{}}],[\"createrpcclient\",{\"_index\":1,\"name\":{\"1\":{}},\"comment\":{}}],[\"createrpcserver\",{\"_index\":21,\"name\":{\"22\":{}},\"comment\":{}}],[\"data\",{\"_index\":64,\"name\":{\"94\":{}},\"comment\":{}}],[\"defaultclientmiddlewarewrapper\",{\"_index\":184,\"name\":{\"377\":{}},\"comment\":{}}],[\"defaultmiddleware\",{\"_index\":182,\"name\":{\"372\":{}},\"comment\":{}}],[\"defaultservermiddlewarewrapper\",{\"_index\":183,\"name\":{\"376\":{}},\"comment\":{}}],[\"defaulttimeoutmap\",{\"_index\":23,\"name\":{\"29\":{}},\"comment\":{}}],[\"description\",{\"_index\":95,\"name\":{\"139\":{},\"144\":{},\"149\":{},\"151\":{},\"155\":{},\"160\":{},\"162\":{},\"166\":{},\"171\":{},\"176\":{},\"178\":{},\"186\":{},\"191\":{},\"196\":{},\"201\":{},\"206\":{},\"208\":{},\"212\":{},\"214\":{},\"218\":{},\"220\":{},\"224\":{},\"226\":{},\"230\":{},\"235\":{},\"240\":{},\"245\":{},\"250\":{}},\"comment\":{}}],[\"destroy\",{\"_index\":13,\"name\":{\"14\":{},\"40\":{}},\"comment\":{}}],[\"detail\",{\"_index\":143,\"name\":{\"276\":{}},\"comment\":{}}],[\"duplexcaller\",{\"_index\":176,\"name\":{\"349\":{}},\"comment\":{}}],[\"duplexhandler\",{\"_index\":169,\"name\":{\"308\":{}},\"comment\":{}}],[\"duplexhandlerimplementation\",{\"_index\":71,\"name\":{\"102\":{}},\"comment\":{}}],[\"duplexstreamcaller\",{\"_index\":18,\"name\":{\"19\":{}},\"comment\":{}}],[\"error\",{\"_index\":60,\"name\":{\"88\":{}},\"comment\":{}}],[\"errorhandleraborted\",{\"_index\":116,\"name\":{\"236\":{}},\"comment\":{}}],[\"errormissingcaller\",{\"_index\":118,\"name\":{\"246\":{}},\"comment\":{}}],[\"errormissingheader\",{\"_index\":115,\"name\":{\"231\":{}},\"comment\":{}}],[\"errorrpc\",{\"_index\":93,\"name\":{\"134\":{}},\"comment\":{}}],[\"errorrpccallerfailed\",{\"_index\":117,\"name\":{\"241\":{}},\"comment\":{}}],[\"errorrpcconnectioninternal\",{\"_index\":114,\"name\":{\"225\":{}},\"comment\":{}}],[\"errorrpcconnectionkeepalivetimeout\",{\"_index\":113,\"name\":{\"219\":{}},\"comment\":{}}],[\"errorrpcconnectionlocal\",{\"_index\":111,\"name\":{\"207\":{}},\"comment\":{}}],[\"errorrpcconnectionpeer\",{\"_index\":112,\"name\":{\"213\":{}},\"comment\":{}}],[\"errorrpcdestroyed\",{\"_index\":96,\"name\":{\"140\":{}},\"comment\":{}}],[\"errorrpchandlerfailed\",{\"_index\":99,\"name\":{\"156\":{}},\"comment\":{}}],[\"errorrpcmessagelength\",{\"_index\":100,\"name\":{\"161\":{}},\"comment\":{}}],[\"errorrpcmethodnotimplemented\",{\"_index\":110,\"name\":{\"202\":{}},\"comment\":{}}],[\"errorrpcmissingresponse\",{\"_index\":101,\"name\":{\"167\":{}},\"comment\":{}}],[\"errorrpcoutputstreamerror\",{\"_index\":102,\"name\":{\"172\":{}},\"comment\":{}}],[\"errorrpcparse\",{\"_index\":98,\"name\":{\"150\":{}},\"comment\":{}}],[\"errorrpcremote\",{\"_index\":103,\"name\":{\"177\":{}},\"comment\":{}}],[\"errorrpcstopping\",{\"_index\":97,\"name\":{\"145\":{}},\"comment\":{}}],[\"errorrpcstreamended\",{\"_index\":107,\"name\":{\"187\":{}},\"comment\":{}}],[\"errorrpctimedout\",{\"_index\":108,\"name\":{\"192\":{}},\"comment\":{}}],[\"errors\",{\"_index\":91,\"name\":{\"132\":{}},\"comment\":{}}],[\"errorutilsundefinedbehaviour\",{\"_index\":109,\"name\":{\"197\":{}},\"comment\":{}}],[\"eventrpc\",{\"_index\":144,\"name\":{\"277\":{}},\"comment\":{}}],[\"eventrpcclient\",{\"_index\":145,\"name\":{\"278\":{}},\"comment\":{}}],[\"eventrpcclientconnect\",{\"_index\":153,\"name\":{\"286\":{}},\"comment\":{}}],[\"eventrpcclientcreate\",{\"_index\":150,\"name\":{\"283\":{}},\"comment\":{}}],[\"eventrpcclientcreated\",{\"_index\":151,\"name\":{\"284\":{}},\"comment\":{}}],[\"eventrpcclientdestroy\",{\"_index\":148,\"name\":{\"281\":{}},\"comment\":{}}],[\"eventrpcclientdestroyed\",{\"_index\":149,\"name\":{\"282\":{}},\"comment\":{}}],[\"eventrpcclienterror\",{\"_index\":152,\"name\":{\"285\":{}},\"comment\":{}}],[\"eventrpcconnection\",{\"_index\":147,\"name\":{\"280\":{}},\"comment\":{}}],[\"eventrpcconnectionerror\",{\"_index\":160,\"name\":{\"293\":{}},\"comment\":{}}],[\"eventrpcserver\",{\"_index\":146,\"name\":{\"279\":{}},\"comment\":{}}],[\"eventrpcserverconnection\",{\"_index\":154,\"name\":{\"287\":{}},\"comment\":{}}],[\"eventrpcservercreate\",{\"_index\":155,\"name\":{\"288\":{}},\"comment\":{}}],[\"eventrpcservercreated\",{\"_index\":156,\"name\":{\"289\":{}},\"comment\":{}}],[\"eventrpcserverdestroy\",{\"_index\":157,\"name\":{\"290\":{}},\"comment\":{}}],[\"eventrpcserverdestroyed\",{\"_index\":158,\"name\":{\"291\":{}},\"comment\":{}}],[\"eventrpcservererror\",{\"_index\":159,\"name\":{\"292\":{}},\"comment\":{}}],[\"events\",{\"_index\":141,\"name\":{\"273\":{}},\"comment\":{}}],[\"filtersensitive\",{\"_index\":27,\"name\":{\"34\":{},\"55\":{}},\"comment\":{}}],[\"forward\",{\"_index\":79,\"name\":{\"116\":{},\"374\":{}},\"comment\":{}}],[\"fromerror\",{\"_index\":26,\"name\":{\"32\":{},\"57\":{}},\"comment\":{}}],[\"fromjson\",{\"_index\":104,\"name\":{\"180\":{}},\"comment\":{}}],[\"gethandlertypes\",{\"_index\":45,\"name\":{\"61\":{}},\"comment\":{}}],[\"handle\",{\"_index\":168,\"name\":{\"303\":{},\"310\":{},\"318\":{},\"325\":{},\"333\":{}},\"comment\":{}}],[\"handler\",{\"_index\":162,\"name\":{\"295\":{}},\"comment\":{}}],[\"handleraborted\",{\"_index\":139,\"name\":{\"271\":{}},\"comment\":{}}],[\"handlerimplementation\",{\"_index\":69,\"name\":{\"99\":{}},\"comment\":{}}],[\"handlermap\",{\"_index\":22,\"name\":{\"28\":{}},\"comment\":{}}],[\"handlernotfound\",{\"_index\":125,\"name\":{\"257\":{}},\"comment\":{}}],[\"handlers\",{\"_index\":161,\"name\":{\"294\":{}},\"comment\":{}}],[\"handlertimeouttime\",{\"_index\":24,\"name\":{\"30\":{}},\"comment\":{}}],[\"handlertype\",{\"_index\":83,\"name\":{\"120\":{}},\"comment\":{}}],[\"handlestream\",{\"_index\":34,\"name\":{\"46\":{}},\"comment\":{}}],[\"id\",{\"_index\":55,\"name\":{\"74\":{},\"84\":{},\"89\":{}},\"comment\":{}}],[\"idgen\",{\"_index\":5,\"name\":{\"5\":{},\"26\":{},\"67\":{}},\"comment\":{}}],[\"internalerror\",{\"_index\":124,\"name\":{\"256\":{}},\"comment\":{}}],[\"invalidparams\",{\"_index\":123,\"name\":{\"255\":{}},\"comment\":{}}],[\"invalidrequest\",{\"_index\":121,\"name\":{\"253\":{}},\"comment\":{}}],[\"isobject\",{\"_index\":48,\"name\":{\"64\":{}},\"comment\":{}}],[\"jsonmessagetobinarystream\",{\"_index\":181,\"name\":{\"371\":{}},\"comment\":{}}],[\"jsonrpc\",{\"_index\":52,\"name\":{\"71\":{},\"77\":{},\"82\":{},\"87\":{}},\"comment\":{}}],[\"jsonrpcerror\",{\"_index\":61,\"name\":{\"90\":{}},\"comment\":{}}],[\"jsonrpcerrorcode\",{\"_index\":119,\"name\":{\"251\":{}},\"comment\":{}}],[\"jsonrpcmessage\",{\"_index\":68,\"name\":{\"98\":{}},\"comment\":{}}],[\"jsonrpcrequest\",{\"_index\":66,\"name\":{\"96\":{}},\"comment\":{}}],[\"jsonrpcrequestmessage\",{\"_index\":51,\"name\":{\"69\":{}},\"comment\":{}}],[\"jsonrpcrequestnotification\",{\"_index\":56,\"name\":{\"75\":{}},\"comment\":{}}],[\"jsonrpcresponse\",{\"_index\":67,\"name\":{\"97\":{}},\"comment\":{}}],[\"jsonrpcresponseerror\",{\"_index\":59,\"name\":{\"85\":{}},\"comment\":{}}],[\"jsonrpcresponseresult\",{\"_index\":57,\"name\":{\"80\":{}},\"comment\":{}}],[\"jsonvalue\",{\"_index\":85,\"name\":{\"122\":{}},\"comment\":{}}],[\"logger\",{\"_index\":6,\"name\":{\"6\":{},\"27\":{}},\"comment\":{}}],[\"mapcallers\",{\"_index\":84,\"name\":{\"121\":{}},\"comment\":{}}],[\"message\",{\"_index\":63,\"name\":{\"93\":{},\"179\":{}},\"comment\":{}}],[\"meta\",{\"_index\":78,\"name\":{\"110\":{}},\"comment\":{}}],[\"metadata\",{\"_index\":105,\"name\":{\"182\":{}},\"comment\":{}}],[\"method\",{\"_index\":53,\"name\":{\"72\":{},\"78\":{}},\"comment\":{}}],[\"methodnotfound\",{\"_index\":122,\"name\":{\"254\":{}},\"comment\":{}}],[\"methods\",{\"_index\":14,\"name\":{\"15\":{}},\"comment\":{}}],[\"methodsproxy\",{\"_index\":12,\"name\":{\"12\":{}},\"comment\":{}}],[\"middleware\",{\"_index\":179,\"name\":{\"369\":{}},\"comment\":{}}],[\"middlewarefactory\",{\"_index\":8,\"name\":{\"8\":{},\"38\":{},\"113\":{}},\"comment\":{}}],[\"missingcaller\",{\"_index\":140,\"name\":{\"272\":{}},\"comment\":{}}],[\"missingheader\",{\"_index\":138,\"name\":{\"270\":{}},\"comment\":{}}],[\"never\",{\"_index\":92,\"name\":{\"133\":{}},\"comment\":{}}],[\"ontimeoutcallback\",{\"_index\":3,\"name\":{\"3\":{},\"24\":{}},\"comment\":{}}],[\"p\",{\"_index\":88,\"name\":{\"127\":{}},\"comment\":{}}],[\"params\",{\"_index\":54,\"name\":{\"73\":{},\"79\":{}},\"comment\":{}}],[\"parseerror\",{\"_index\":120,\"name\":{\"252\":{}},\"comment\":{}}],[\"parseheadstream\",{\"_index\":46,\"name\":{\"62\":{}},\"comment\":{}}],[\"parsejsonrpcmessage\",{\"_index\":42,\"name\":{\"54\":{}},\"comment\":{}}],[\"parsejsonrpcrequest\",{\"_index\":36,\"name\":{\"48\":{}},\"comment\":{}}],[\"parsejsonrpcrequestmessage\",{\"_index\":37,\"name\":{\"49\":{}},\"comment\":{}}],[\"parsejsonrpcrequestnotification\",{\"_index\":38,\"name\":{\"50\":{}},\"comment\":{}}],[\"parsejsonrpcresponse\",{\"_index\":41,\"name\":{\"53\":{}},\"comment\":{}}],[\"parsejsonrpcresponseerror\",{\"_index\":40,\"name\":{\"52\":{}},\"comment\":{}}],[\"parsejsonrpcresponseresult\",{\"_index\":39,\"name\":{\"51\":{}},\"comment\":{}}],[\"pojo\",{\"_index\":86,\"name\":{\"123\":{}},\"comment\":{}}],[\"promise\",{\"_index\":47,\"name\":{\"63\":{}},\"comment\":{}}],[\"promisedeconstructed\",{\"_index\":87,\"name\":{\"125\":{}},\"comment\":{}}],[\"rawcaller\",{\"_index\":177,\"name\":{\"354\":{}},\"comment\":{}}],[\"rawhandler\",{\"_index\":170,\"name\":{\"316\":{}},\"comment\":{}}],[\"rawhandlerimplementation\",{\"_index\":70,\"name\":{\"101\":{}},\"comment\":{}}],[\"rawstreamcaller\",{\"_index\":19,\"name\":{\"20\":{}},\"comment\":{}}],[\"registerclientstreamhandler\",{\"_index\":33,\"name\":{\"45\":{}},\"comment\":{}}],[\"registerduplexstreamhandler\",{\"_index\":30,\"name\":{\"42\":{}},\"comment\":{}}],[\"registerontimeoutcallback\",{\"_index\":10,\"name\":{\"10\":{},\"39\":{}},\"comment\":{}}],[\"registerrawstreamhandler\",{\"_index\":29,\"name\":{\"41\":{}},\"comment\":{}}],[\"registerserverstreamhandler\",{\"_index\":32,\"name\":{\"44\":{}},\"comment\":{}}],[\"registerunaryhandler\",{\"_index\":31,\"name\":{\"43\":{}},\"comment\":{}}],[\"rejectp\",{\"_index\":90,\"name\":{\"130\":{}},\"comment\":{}}],[\"resolvep\",{\"_index\":89,\"name\":{\"128\":{}},\"comment\":{}}],[\"result\",{\"_index\":58,\"name\":{\"83\":{}},\"comment\":{}}],[\"reverse\",{\"_index\":80,\"name\":{\"117\":{},\"375\":{}},\"comment\":{}}],[\"rpcclient\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"rpcconnectioninternal\",{\"_index\":137,\"name\":{\"269\":{}},\"comment\":{}}],[\"rpcconnectionkeepalivetimeout\",{\"_index\":136,\"name\":{\"268\":{}},\"comment\":{}}],[\"rpcconnectionlocal\",{\"_index\":134,\"name\":{\"266\":{}},\"comment\":{}}],[\"rpcconnectionpeer\",{\"_index\":135,\"name\":{\"267\":{}},\"comment\":{}}],[\"rpcdestroyed\",{\"_index\":127,\"name\":{\"259\":{}},\"comment\":{}}],[\"rpcerrorevent\",{\"_index\":142,\"name\":{\"274\":{}},\"comment\":{}}],[\"rpcmessagelength\",{\"_index\":128,\"name\":{\"260\":{}},\"comment\":{}}],[\"rpcmissingresponse\",{\"_index\":129,\"name\":{\"261\":{}},\"comment\":{}}],[\"rpcoutputstreamerror\",{\"_index\":130,\"name\":{\"262\":{}},\"comment\":{}}],[\"rpcremote\",{\"_index\":131,\"name\":{\"263\":{}},\"comment\":{}}],[\"rpcserver\",{\"_index\":20,\"name\":{\"21\":{}},\"comment\":{}}],[\"rpcstopping\",{\"_index\":126,\"name\":{\"258\":{}},\"comment\":{}}],[\"rpcstream\",{\"_index\":76,\"name\":{\"107\":{}},\"comment\":{}}],[\"rpcstreamended\",{\"_index\":132,\"name\":{\"264\":{}},\"comment\":{}}],[\"rpctimedout\",{\"_index\":133,\"name\":{\"265\":{}},\"comment\":{}}],[\"servercaller\",{\"_index\":178,\"name\":{\"359\":{}},\"comment\":{}}],[\"serverhandler\",{\"_index\":171,\"name\":{\"323\":{}},\"comment\":{}}],[\"serverhandlerimplementation\",{\"_index\":72,\"name\":{\"103\":{}},\"comment\":{}}],[\"servermanifest\",{\"_index\":81,\"name\":{\"118\":{}},\"comment\":{}}],[\"serverstreamcaller\",{\"_index\":16,\"name\":{\"17\":{}},\"comment\":{}}],[\"sleep\",{\"_index\":49,\"name\":{\"65\":{}},\"comment\":{}}],[\"streamfactory\",{\"_index\":7,\"name\":{\"7\":{},\"111\":{}},\"comment\":{}}],[\"streamkeepalivetimeouttime\",{\"_index\":11,\"name\":{\"11\":{}},\"comment\":{}}],[\"timeout\",{\"_index\":165,\"name\":{\"299\":{},\"306\":{},\"314\":{},\"321\":{},\"329\":{},\"336\":{}},\"comment\":{}}],[\"toerror\",{\"_index\":28,\"name\":{\"36\":{},\"58\":{}},\"comment\":{}}],[\"tojson\",{\"_index\":106,\"name\":{\"183\":{}},\"comment\":{}}],[\"type\",{\"_index\":65,\"name\":{\"95\":{},\"137\":{},\"142\":{},\"147\":{},\"153\":{},\"158\":{},\"165\":{},\"169\":{},\"174\":{},\"184\":{},\"189\":{},\"194\":{},\"199\":{},\"204\":{},\"211\":{},\"217\":{},\"223\":{},\"229\":{},\"233\":{},\"238\":{},\"243\":{},\"248\":{},\"343\":{},\"346\":{},\"351\":{},\"356\":{},\"361\":{},\"366\":{}},\"comment\":{}}],[\"types\",{\"_index\":50,\"name\":{\"66\":{}},\"comment\":{}}],[\"unarycaller\",{\"_index\":15,\"name\":{\"16\":{},\"364\":{}},\"comment\":{}}],[\"unaryhandler\",{\"_index\":172,\"name\":{\"331\":{}},\"comment\":{}}],[\"unaryhandlerimplementation\",{\"_index\":74,\"name\":{\"105\":{}},\"comment\":{}}],[\"utils\",{\"_index\":35,\"name\":{\"47\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file +window.searchData = JSON.parse("{\"kinds\":{\"4\":\"Namespace\",\"8\":\"Enumeration\",\"16\":\"Enumeration Member\",\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"262144\":\"Accessor\",\"4194304\":\"Type alias\",\"8388608\":\"Reference\"},\"rows\":[{\"kind\":128,\"name\":\"RPCClient\",\"url\":\"classes/RPCClient.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RPCClient.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"onTimeoutCallback\",\"url\":\"classes/RPCClient.html#onTimeoutCallback\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCClient.html#onTimeoutCallback.__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCClient.onTimeoutCallback\"},{\"kind\":1024,\"name\":\"idGen\",\"url\":\"classes/RPCClient.html#idGen\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"logger\",\"url\":\"classes/RPCClient.html#logger\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"streamFactory\",\"url\":\"classes/RPCClient.html#streamFactory\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"toError\",\"url\":\"classes/RPCClient.html#toError\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCClient.html#toError.__type-3\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCClient.toError\"},{\"kind\":1024,\"name\":\"middlewareFactory\",\"url\":\"classes/RPCClient.html#middlewareFactory\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"callerTypes\",\"url\":\"classes/RPCClient.html#callerTypes\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"registerOnTimeoutCallback\",\"url\":\"classes/RPCClient.html#registerOnTimeoutCallback\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"streamKeepAliveTimeoutTime\",\"url\":\"classes/RPCClient.html#streamKeepAliveTimeoutTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":1024,\"name\":\"methodsProxy\",\"url\":\"classes/RPCClient.html#methodsProxy\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCClient.html#methodsProxy.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCClient.methodsProxy\"},{\"kind\":262144,\"name\":\"methods\",\"url\":\"classes/RPCClient.html#methods\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"unaryCaller\",\"url\":\"classes/RPCClient.html#unaryCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"serverStreamCaller\",\"url\":\"classes/RPCClient.html#serverStreamCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"clientStreamCaller\",\"url\":\"classes/RPCClient.html#clientStreamCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"duplexStreamCaller\",\"url\":\"classes/RPCClient.html#duplexStreamCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":2048,\"name\":\"rawStreamCaller\",\"url\":\"classes/RPCClient.html#rawStreamCaller\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCClient\"},{\"kind\":128,\"name\":\"RPCServer\",\"url\":\"classes/RPCServer.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RPCServer.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"onTimeoutCallback\",\"url\":\"classes/RPCServer.html#onTimeoutCallback\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCServer.html#onTimeoutCallback.__type-4\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCServer.onTimeoutCallback\"},{\"kind\":1024,\"name\":\"idGen\",\"url\":\"classes/RPCServer.html#idGen\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"logger\",\"url\":\"classes/RPCServer.html#logger\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"handlerMap\",\"url\":\"classes/RPCServer.html#handlerMap\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"defaultTimeoutMap\",\"url\":\"classes/RPCServer.html#defaultTimeoutMap\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"handlerTimeoutTime\",\"url\":\"classes/RPCServer.html#handlerTimeoutTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"activeStreams\",\"url\":\"classes/RPCServer.html#activeStreams\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":1024,\"name\":\"fromError\",\"url\":\"classes/RPCServer.html#fromError\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCServer.html#fromError.__type-2\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCServer.fromError\"},{\"kind\":1024,\"name\":\"filterSensitive\",\"url\":\"classes/RPCServer.html#filterSensitive\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/RPCServer.html#filterSensitive.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCServer.filterSensitive\"},{\"kind\":1024,\"name\":\"middlewareFactory\",\"url\":\"classes/RPCServer.html#middlewareFactory\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerOnTimeoutCallback\",\"url\":\"classes/RPCServer.html#registerOnTimeoutCallback\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"start\",\"url\":\"classes/RPCServer.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"stop\",\"url\":\"classes/RPCServer.html#stop\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerRawStreamHandler\",\"url\":\"classes/RPCServer.html#registerRawStreamHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerDuplexStreamHandler\",\"url\":\"classes/RPCServer.html#registerDuplexStreamHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerUnaryHandler\",\"url\":\"classes/RPCServer.html#registerUnaryHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerServerStreamHandler\",\"url\":\"classes/RPCServer.html#registerServerStreamHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"registerClientStreamHandler\",\"url\":\"classes/RPCServer.html#registerClientStreamHandler\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"RPCServer\"},{\"kind\":2048,\"name\":\"handleStream\",\"url\":\"classes/RPCServer.html#handleStream\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RPCServer\"},{\"kind\":4,\"name\":\"utils\",\"url\":\"modules/utils.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"parseJSONRPCRequest\",\"url\":\"functions/utils.parseJSONRPCRequest.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCRequestMessage\",\"url\":\"functions/utils.parseJSONRPCRequestMessage.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCRequestNotification\",\"url\":\"functions/utils.parseJSONRPCRequestNotification.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCResponseResult\",\"url\":\"functions/utils.parseJSONRPCResponseResult.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCResponseError\",\"url\":\"functions/utils.parseJSONRPCResponseError.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCResponse\",\"url\":\"functions/utils.parseJSONRPCResponse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseJSONRPCMessage\",\"url\":\"functions/utils.parseJSONRPCMessage.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"filterSensitive\",\"url\":\"functions/utils.filterSensitive.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/utils.filterSensitive.html#filterSensitive.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"utils.filterSensitive.filterSensitive\"},{\"kind\":64,\"name\":\"fromError\",\"url\":\"functions/utils.fromError.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":8388608,\"name\":\"toError\",\"url\":\"modules/utils.html#toError\",\"classes\":\"tsd-kind-reference tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"clientInputTransformStream\",\"url\":\"functions/utils.clientInputTransformStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"clientOutputTransformStream\",\"url\":\"functions/utils.clientOutputTransformStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"getHandlerTypes\",\"url\":\"functions/utils.getHandlerTypes.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"parseHeadStream\",\"url\":\"functions/utils.parseHeadStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"promise\",\"url\":\"functions/utils.promise.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"isObject\",\"url\":\"functions/utils.isObject.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"sleep\",\"url\":\"functions/utils.sleep.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":64,\"name\":\"never\",\"url\":\"functions/utils.never.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"utils\"},{\"kind\":4,\"name\":\"errors\",\"url\":\"modules/errors.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":128,\"name\":\"ErrorRPC\",\"url\":\"classes/errors.ErrorRPC.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPC.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPC\"},{\"kind\":128,\"name\":\"ErrorRPCServer\",\"url\":\"classes/errors.ErrorRPCServer.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCServer.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCServer\"},{\"kind\":128,\"name\":\"ErrorRPCServerNotRunning\",\"url\":\"classes/errors.ErrorRPCServerNotRunning.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCServerNotRunning.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCServerNotRunning\"},{\"kind\":128,\"name\":\"ErrorRPCProtocol\",\"url\":\"classes/errors.ErrorRPCProtocol.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCProtocol.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCProtocol\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCProtocol.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCProtocol\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCProtocol.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCProtocol\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCProtocol.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCProtocol\"},{\"kind\":128,\"name\":\"ErrorRPCStopping\",\"url\":\"classes/errors.ErrorRPCStopping.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCStopping.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCStopping\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCStopping.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStopping\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCStopping.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCStopping\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCStopping.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStopping\"},{\"kind\":128,\"name\":\"ErrorRPCParse\",\"url\":\"classes/errors.ErrorRPCParse.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCParse.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCParse\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCParse.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCParse\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCParse.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCParse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCParse.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCParse\"},{\"kind\":128,\"name\":\"ErrorRPCHandlerFailed\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCHandlerFailed\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCHandlerFailed\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCHandlerFailed\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCHandlerFailed.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCHandlerFailed\"},{\"kind\":128,\"name\":\"ErrorRPCMessageLength\",\"url\":\"classes/errors.ErrorRPCMessageLength.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCMessageLength.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMessageLength\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCMessageLength.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMessageLength\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCMessageLength.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMessageLength\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCMessageLength.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMessageLength\"},{\"kind\":128,\"name\":\"ErrorRPCMissingResponse\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMissingResponse\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMissingResponse\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMissingResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCMissingResponse.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMissingResponse\"},{\"kind\":128,\"name\":\"ErrorRPCOutputStreamError\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCOutputStreamError\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCOutputStreamError\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCOutputStreamError\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCOutputStreamError.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCOutputStreamError\"},{\"kind\":128,\"name\":\"ErrorRPCRemote\",\"url\":\"classes/errors.ErrorRPCRemote.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCRemote.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/errors.ErrorRPCRemote.html#message-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":2048,\"name\":\"fromJSON\",\"url\":\"classes/errors.ErrorRPCRemote.html#fromJSON\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCRemote.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/errors.ErrorRPCRemote.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":1024,\"name\":\"metadata\",\"url\":\"classes/errors.ErrorRPCRemote.html#metadata\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":2048,\"name\":\"toJSON\",\"url\":\"classes/errors.ErrorRPCRemote.html#toJSON\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCRemote.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCRemote.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCRemote\"},{\"kind\":128,\"name\":\"ErrorRPCStreamEnded\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCStreamEnded\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStreamEnded\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCStreamEnded\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCStreamEnded.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCStreamEnded\"},{\"kind\":128,\"name\":\"ErrorRPCTimedOut\",\"url\":\"classes/errors.ErrorRPCTimedOut.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCTimedOut.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCTimedOut\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCTimedOut.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCTimedOut\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCTimedOut.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCTimedOut\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCTimedOut.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCTimedOut\"},{\"kind\":128,\"name\":\"ErrorUtilsUndefinedBehaviour\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorUtilsUndefinedBehaviour\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorUtilsUndefinedBehaviour\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorUtilsUndefinedBehaviour\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorUtilsUndefinedBehaviour.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorUtilsUndefinedBehaviour\"},{\"kind\":128,\"name\":\"ErrorRPCMethodNotImplemented\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMethodNotImplemented\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMethodNotImplemented\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCMethodNotImplemented\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCMethodNotImplemented.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCMethodNotImplemented\"},{\"kind\":128,\"name\":\"ErrorRPCConnectionLocal\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionLocal\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionLocal\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionLocal\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCConnectionLocal.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionLocal\"},{\"kind\":128,\"name\":\"ErrorRPCConnectionPeer\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionPeer\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionPeer\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionPeer\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCConnectionPeer.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionPeer\"},{\"kind\":128,\"name\":\"ErrorRPCConnectionKeepAliveTimeOut\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionKeepAliveTimeOut\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionKeepAliveTimeOut\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionKeepAliveTimeOut\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionKeepAliveTimeOut\"},{\"kind\":128,\"name\":\"ErrorRPCConnectionInternal\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionInternal\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionInternal\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCConnectionInternal\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCConnectionInternal.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCConnectionInternal\"},{\"kind\":128,\"name\":\"ErrorMissingHeader\",\"url\":\"classes/errors.ErrorMissingHeader.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorMissingHeader.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorMissingHeader\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorMissingHeader.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingHeader\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorMissingHeader.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorMissingHeader\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorMissingHeader.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingHeader\"},{\"kind\":128,\"name\":\"ErrorHandlerAborted\",\"url\":\"classes/errors.ErrorHandlerAborted.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorHandlerAborted.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorHandlerAborted\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorHandlerAborted.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorHandlerAborted\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorHandlerAborted.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorHandlerAborted\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorHandlerAborted.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorHandlerAborted\"},{\"kind\":128,\"name\":\"ErrorRPCCallerFailed\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCCallerFailed\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCCallerFailed\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorRPCCallerFailed\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorRPCCallerFailed.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorRPCCallerFailed\"},{\"kind\":128,\"name\":\"ErrorMissingCaller\",\"url\":\"classes/errors.ErrorMissingCaller.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"classes/errors.ErrorMissingCaller.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorMissingCaller\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"classes/errors.ErrorMissingCaller.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingCaller\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"classes/errors.ErrorMissingCaller.html#code\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"errors.ErrorMissingCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/errors.ErrorMissingCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"errors.ErrorMissingCaller\"},{\"kind\":8,\"name\":\"JSONRPCErrorCode\",\"url\":\"enums/errors.JSONRPCErrorCode.html\",\"classes\":\"tsd-kind-enum tsd-parent-kind-namespace\",\"parent\":\"errors\"},{\"kind\":16,\"name\":\"ParseError\",\"url\":\"enums/errors.JSONRPCErrorCode.html#ParseError\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"InvalidRequest\",\"url\":\"enums/errors.JSONRPCErrorCode.html#InvalidRequest\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"MethodNotFound\",\"url\":\"enums/errors.JSONRPCErrorCode.html#MethodNotFound\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"InvalidParams\",\"url\":\"enums/errors.JSONRPCErrorCode.html#InvalidParams\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"InternalError\",\"url\":\"enums/errors.JSONRPCErrorCode.html#InternalError\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"HandlerNotFound\",\"url\":\"enums/errors.JSONRPCErrorCode.html#HandlerNotFound\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCStopping\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCStopping\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCMessageLength\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCMessageLength\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCMissingResponse\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCMissingResponse\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCOutputStreamError\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCOutputStreamError\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCRemote\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCRemote\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCStreamEnded\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCStreamEnded\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCTimedOut\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCTimedOut\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCConnectionLocal\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCConnectionLocal\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCConnectionPeer\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCConnectionPeer\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCConnectionKeepAliveTimeOut\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCConnectionKeepAliveTimeOut\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"RPCConnectionInternal\",\"url\":\"enums/errors.JSONRPCErrorCode.html#RPCConnectionInternal\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"MissingHeader\",\"url\":\"enums/errors.JSONRPCErrorCode.html#MissingHeader\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"HandlerAborted\",\"url\":\"enums/errors.JSONRPCErrorCode.html#HandlerAborted\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":16,\"name\":\"MissingCaller\",\"url\":\"enums/errors.JSONRPCErrorCode.html#MissingCaller\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"errors.JSONRPCErrorCode\"},{\"kind\":4,\"name\":\"events\",\"url\":\"modules/events.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":128,\"name\":\"RPCErrorEvent\",\"url\":\"classes/events.RPCErrorEvent.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/events.RPCErrorEvent.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"events.RPCErrorEvent\"},{\"kind\":1024,\"name\":\"detail\",\"url\":\"classes/events.RPCErrorEvent.html#detail\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"events.RPCErrorEvent\"},{\"kind\":128,\"name\":\"EventRPCClient\",\"url\":\"classes/events.EventRPCClient.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServer\",\"url\":\"classes/events.EventRPCServer.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCConnection\",\"url\":\"classes/events.EventRPCConnection.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerError\",\"url\":\"classes/events.EventRPCServerError.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCConnectionError\",\"url\":\"classes/events.EventRPCConnectionError.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerStopping\",\"url\":\"classes/events.EventRPCServerStopping.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerStopped\",\"url\":\"classes/events.EventRPCServerStopped.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerStart\",\"url\":\"classes/events.EventRPCServerStart.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":128,\"name\":\"EventRPCServerStarted\",\"url\":\"classes/events.EventRPCServerStarted.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"events\"},{\"kind\":4,\"name\":\"middleware\",\"url\":\"modules/middleware.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"binaryToJsonMessageStream\",\"url\":\"functions/middleware.binaryToJsonMessageStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"},{\"kind\":64,\"name\":\"jsonMessageToBinaryStream\",\"url\":\"functions/middleware.jsonMessageToBinaryStream.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"},{\"kind\":64,\"name\":\"defaultMiddleware\",\"url\":\"functions/middleware.defaultMiddleware.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/middleware.defaultMiddleware.html#defaultMiddleware.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"middleware.defaultMiddleware.defaultMiddleware\"},{\"kind\":1024,\"name\":\"forward\",\"url\":\"functions/middleware.defaultMiddleware.html#defaultMiddleware.__type.forward\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"middleware.defaultMiddleware.defaultMiddleware.__type\"},{\"kind\":1024,\"name\":\"reverse\",\"url\":\"functions/middleware.defaultMiddleware.html#defaultMiddleware.__type.reverse\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"middleware.defaultMiddleware.defaultMiddleware.__type\"},{\"kind\":64,\"name\":\"defaultServerMiddlewareWrapper\",\"url\":\"functions/middleware.defaultServerMiddlewareWrapper.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"},{\"kind\":64,\"name\":\"defaultClientMiddlewareWrapper\",\"url\":\"functions/middleware.defaultClientMiddlewareWrapper.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"middleware\"},{\"kind\":4194304,\"name\":\"IdGen\",\"url\":\"types/IdGen.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/IdGen.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"IdGen\"},{\"kind\":4194304,\"name\":\"JSONRPCRequestMessage\",\"url\":\"types/JSONRPCRequestMessage.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/JSONRPCRequestMessage.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"JSONRPCRequestMessage\"},{\"kind\":1024,\"name\":\"jsonrpc\",\"url\":\"types/JSONRPCRequestMessage.html#__type.jsonrpc\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCRequestMessage.__type\"},{\"kind\":1024,\"name\":\"method\",\"url\":\"types/JSONRPCRequestMessage.html#__type.method\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCRequestMessage.__type\"},{\"kind\":1024,\"name\":\"params\",\"url\":\"types/JSONRPCRequestMessage.html#__type.params\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCRequestMessage.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"types/JSONRPCRequestMessage.html#__type.id\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCRequestMessage.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCRequestNotification\",\"url\":\"types/JSONRPCRequestNotification.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/JSONRPCRequestNotification.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"JSONRPCRequestNotification\"},{\"kind\":1024,\"name\":\"jsonrpc\",\"url\":\"types/JSONRPCRequestNotification.html#__type.jsonrpc\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCRequestNotification.__type\"},{\"kind\":1024,\"name\":\"method\",\"url\":\"types/JSONRPCRequestNotification.html#__type.method\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCRequestNotification.__type\"},{\"kind\":1024,\"name\":\"params\",\"url\":\"types/JSONRPCRequestNotification.html#__type.params\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCRequestNotification.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCResponseResult\",\"url\":\"types/JSONRPCResponseResult.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/JSONRPCResponseResult.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"JSONRPCResponseResult\"},{\"kind\":1024,\"name\":\"jsonrpc\",\"url\":\"types/JSONRPCResponseResult.html#__type.jsonrpc\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCResponseResult.__type\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"types/JSONRPCResponseResult.html#__type.result\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCResponseResult.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"types/JSONRPCResponseResult.html#__type.id\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCResponseResult.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCResponseError\",\"url\":\"types/JSONRPCResponseError.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/JSONRPCResponseError.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"JSONRPCResponseError\"},{\"kind\":1024,\"name\":\"jsonrpc\",\"url\":\"types/JSONRPCResponseError.html#__type.jsonrpc\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCResponseError.__type\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"types/JSONRPCResponseError.html#__type.error\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCResponseError.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"types/JSONRPCResponseError.html#__type.id\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCResponseError.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCError\",\"url\":\"types/JSONRPCError.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/JSONRPCError.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"JSONRPCError\"},{\"kind\":1024,\"name\":\"code\",\"url\":\"types/JSONRPCError.html#__type.code\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCError.__type\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"types/JSONRPCError.html#__type.message\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCError.__type\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"types/JSONRPCError.html#__type.data\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"JSONRPCError.__type\"},{\"kind\":4194304,\"name\":\"JSONRPCRequest\",\"url\":\"types/JSONRPCRequest.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"JSONRPCResponse\",\"url\":\"types/JSONRPCResponse.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"JSONRPCMessage\",\"url\":\"types/JSONRPCMessage.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"HandlerImplementation\",\"url\":\"types/HandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/HandlerImplementation.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"HandlerImplementation\"},{\"kind\":4194304,\"name\":\"RawHandlerImplementation\",\"url\":\"types/RawHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"DuplexHandlerImplementation\",\"url\":\"types/DuplexHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ServerHandlerImplementation\",\"url\":\"types/ServerHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ClientHandlerImplementation\",\"url\":\"types/ClientHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"UnaryHandlerImplementation\",\"url\":\"types/UnaryHandlerImplementation.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ContainerType\",\"url\":\"types/ContainerType.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"RPCStream\",\"url\":\"interfaces/RPCStream.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"cancel\",\"url\":\"interfaces/RPCStream.html#cancel\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RPCStream\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/RPCStream.html#cancel.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"RPCStream.cancel\"},{\"kind\":1024,\"name\":\"meta\",\"url\":\"interfaces/RPCStream.html#meta\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RPCStream\"},{\"kind\":4194304,\"name\":\"StreamFactory\",\"url\":\"types/StreamFactory.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/StreamFactory.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"StreamFactory\"},{\"kind\":4194304,\"name\":\"MiddlewareFactory\",\"url\":\"types/MiddlewareFactory.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/MiddlewareFactory.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"MiddlewareFactory\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/MiddlewareFactory.html#__type.__type-1.__type-2\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"MiddlewareFactory.__type.__type\"},{\"kind\":1024,\"name\":\"forward\",\"url\":\"types/MiddlewareFactory.html#__type.__type-1.__type-2.forward\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"MiddlewareFactory.__type.__type.__type\"},{\"kind\":1024,\"name\":\"reverse\",\"url\":\"types/MiddlewareFactory.html#__type.__type-1.__type-2.reverse\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"MiddlewareFactory.__type.__type.__type\"},{\"kind\":4194304,\"name\":\"ServerManifest\",\"url\":\"types/ServerManifest.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ClientManifest\",\"url\":\"types/ClientManifest.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"HandlerType\",\"url\":\"types/HandlerType.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"MapCallers\",\"url\":\"types/MapCallers.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"JSONValue\",\"url\":\"types/JSONValue.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"POJO\",\"url\":\"types/POJO.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/POJO.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"POJO\"},{\"kind\":4194304,\"name\":\"PromiseDeconstructed\",\"url\":\"types/PromiseDeconstructed.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/PromiseDeconstructed.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"PromiseDeconstructed\"},{\"kind\":1024,\"name\":\"p\",\"url\":\"types/PromiseDeconstructed.html#__type.p\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PromiseDeconstructed.__type\"},{\"kind\":1024,\"name\":\"resolveP\",\"url\":\"types/PromiseDeconstructed.html#__type.resolveP\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PromiseDeconstructed.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/PromiseDeconstructed.html#__type.resolveP.__type-3\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"PromiseDeconstructed.__type.resolveP\"},{\"kind\":1024,\"name\":\"rejectP\",\"url\":\"types/PromiseDeconstructed.html#__type.rejectP\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PromiseDeconstructed.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"types/PromiseDeconstructed.html#__type.rejectP.__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"PromiseDeconstructed.__type.rejectP\"},{\"kind\":4194304,\"name\":\"HandlerTypes\",\"url\":\"types/HandlerTypes.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"Handler\",\"url\":\"classes/Handler.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Handler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Handler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/Handler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"Handler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/Handler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"Handler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/Handler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Handler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/Handler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"Handler\"},{\"kind\":128,\"name\":\"ClientHandler\",\"url\":\"classes/ClientHandler.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ClientHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ClientHandler\"},{\"kind\":2048,\"name\":\"handle\",\"url\":\"classes/ClientHandler.html#handle\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ClientHandler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/ClientHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ClientHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/ClientHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ClientHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/ClientHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ClientHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/ClientHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ClientHandler\"},{\"kind\":128,\"name\":\"DuplexHandler\",\"url\":\"classes/DuplexHandler.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/DuplexHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"DuplexHandler\"},{\"kind\":2048,\"name\":\"handle\",\"url\":\"classes/DuplexHandler.html#handle\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"DuplexHandler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/DuplexHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"DuplexHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/DuplexHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"DuplexHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/DuplexHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"DuplexHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/DuplexHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"DuplexHandler\"},{\"kind\":128,\"name\":\"RawHandler\",\"url\":\"classes/RawHandler.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RawHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RawHandler\"},{\"kind\":2048,\"name\":\"handle\",\"url\":\"classes/RawHandler.html#handle\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RawHandler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/RawHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"RawHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/RawHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"RawHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/RawHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RawHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/RawHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"RawHandler\"},{\"kind\":128,\"name\":\"ServerHandler\",\"url\":\"classes/ServerHandler.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ServerHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ServerHandler\"},{\"kind\":2048,\"name\":\"handle\",\"url\":\"classes/ServerHandler.html#handle\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ServerHandler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/ServerHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ServerHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/ServerHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ServerHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/ServerHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ServerHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/ServerHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ServerHandler\"},{\"kind\":128,\"name\":\"UnaryHandler\",\"url\":\"classes/UnaryHandler.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/UnaryHandler.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"UnaryHandler\"},{\"kind\":2048,\"name\":\"handle\",\"url\":\"classes/UnaryHandler.html#handle\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"UnaryHandler\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/UnaryHandler.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"UnaryHandler\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/UnaryHandler.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"UnaryHandler\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"classes/UnaryHandler.html#timeout\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"UnaryHandler\"},{\"kind\":1024,\"name\":\"container\",\"url\":\"classes/UnaryHandler.html#container\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"UnaryHandler\"},{\"kind\":128,\"name\":\"Caller\",\"url\":\"classes/Caller.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Caller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Caller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/Caller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"Caller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/Caller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"Caller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/Caller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Caller\"},{\"kind\":128,\"name\":\"ClientCaller\",\"url\":\"classes/ClientCaller.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ClientCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ClientCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/ClientCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ClientCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/ClientCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ClientCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/ClientCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ClientCaller\"},{\"kind\":128,\"name\":\"DuplexCaller\",\"url\":\"classes/DuplexCaller.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/DuplexCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"DuplexCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/DuplexCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"DuplexCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/DuplexCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"DuplexCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/DuplexCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"DuplexCaller\"},{\"kind\":128,\"name\":\"RawCaller\",\"url\":\"classes/RawCaller.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RawCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RawCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/RawCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"RawCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/RawCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"RawCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/RawCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"RawCaller\"},{\"kind\":128,\"name\":\"ServerCaller\",\"url\":\"classes/ServerCaller.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ServerCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ServerCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/ServerCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ServerCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/ServerCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ServerCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/ServerCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ServerCaller\"},{\"kind\":128,\"name\":\"UnaryCaller\",\"url\":\"classes/UnaryCaller.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/UnaryCaller.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"UnaryCaller\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"classes/UnaryCaller.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"UnaryCaller\"},{\"kind\":1024,\"name\":\"_inputType\",\"url\":\"classes/UnaryCaller.html#_inputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"UnaryCaller\"},{\"kind\":1024,\"name\":\"_outputType\",\"url\":\"classes/UnaryCaller.html#_outputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"UnaryCaller\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,54.723]],[\"comment/0\",[]],[\"name/1\",[1,30.744]],[\"comment/1\",[]],[\"name/2\",[2,49.614]],[\"comment/2\",[]],[\"name/3\",[3,27.207]],[\"comment/3\",[]],[\"name/4\",[4,46.25]],[\"comment/4\",[]],[\"name/5\",[5,49.614]],[\"comment/5\",[]],[\"name/6\",[6,49.614]],[\"comment/6\",[]],[\"name/7\",[7,49.614]],[\"comment/7\",[]],[\"name/8\",[3,27.207]],[\"comment/8\",[]],[\"name/9\",[8,46.25]],[\"comment/9\",[]],[\"name/10\",[9,54.723]],[\"comment/10\",[]],[\"name/11\",[10,49.614]],[\"comment/11\",[]],[\"name/12\",[11,54.723]],[\"comment/12\",[]],[\"name/13\",[12,54.723]],[\"comment/13\",[]],[\"name/14\",[3,27.207]],[\"comment/14\",[]],[\"name/15\",[13,54.723]],[\"comment/15\",[]],[\"name/16\",[14,49.614]],[\"comment/16\",[]],[\"name/17\",[15,54.723]],[\"comment/17\",[]],[\"name/18\",[16,54.723]],[\"comment/18\",[]],[\"name/19\",[17,54.723]],[\"comment/19\",[]],[\"name/20\",[18,54.723]],[\"comment/20\",[]],[\"name/21\",[19,54.723]],[\"comment/21\",[]],[\"name/22\",[1,30.744]],[\"comment/22\",[]],[\"name/23\",[2,49.614]],[\"comment/23\",[]],[\"name/24\",[3,27.207]],[\"comment/24\",[]],[\"name/25\",[4,46.25]],[\"comment/25\",[]],[\"name/26\",[5,49.614]],[\"comment/26\",[]],[\"name/27\",[20,54.723]],[\"comment/27\",[]],[\"name/28\",[21,54.723]],[\"comment/28\",[]],[\"name/29\",[22,54.723]],[\"comment/29\",[]],[\"name/30\",[23,54.723]],[\"comment/30\",[]],[\"name/31\",[24,49.614]],[\"comment/31\",[]],[\"name/32\",[3,27.207]],[\"comment/32\",[]],[\"name/33\",[25,49.614]],[\"comment/33\",[]],[\"name/34\",[3,27.207]],[\"comment/34\",[]],[\"name/35\",[8,46.25]],[\"comment/35\",[]],[\"name/36\",[10,49.614]],[\"comment/36\",[]],[\"name/37\",[26,54.723]],[\"comment/37\",[]],[\"name/38\",[27,54.723]],[\"comment/38\",[]],[\"name/39\",[28,54.723]],[\"comment/39\",[]],[\"name/40\",[29,54.723]],[\"comment/40\",[]],[\"name/41\",[30,54.723]],[\"comment/41\",[]],[\"name/42\",[31,54.723]],[\"comment/42\",[]],[\"name/43\",[32,54.723]],[\"comment/43\",[]],[\"name/44\",[33,54.723]],[\"comment/44\",[]],[\"name/45\",[34,54.723]],[\"comment/45\",[]],[\"name/46\",[35,54.723]],[\"comment/46\",[]],[\"name/47\",[36,54.723]],[\"comment/47\",[]],[\"name/48\",[37,54.723]],[\"comment/48\",[]],[\"name/49\",[38,54.723]],[\"comment/49\",[]],[\"name/50\",[39,54.723]],[\"comment/50\",[]],[\"name/51\",[40,54.723]],[\"comment/51\",[]],[\"name/52\",[41,54.723]],[\"comment/52\",[]],[\"name/53\",[25,49.614]],[\"comment/53\",[]],[\"name/54\",[3,27.207]],[\"comment/54\",[]],[\"name/55\",[24,49.614]],[\"comment/55\",[]],[\"name/56\",[7,49.614]],[\"comment/56\",[]],[\"name/57\",[42,54.723]],[\"comment/57\",[]],[\"name/58\",[43,54.723]],[\"comment/58\",[]],[\"name/59\",[44,54.723]],[\"comment/59\",[]],[\"name/60\",[45,54.723]],[\"comment/60\",[]],[\"name/61\",[46,54.723]],[\"comment/61\",[]],[\"name/62\",[47,54.723]],[\"comment/62\",[]],[\"name/63\",[48,54.723]],[\"comment/63\",[]],[\"name/64\",[49,54.723]],[\"comment/64\",[]],[\"name/65\",[50,54.723]],[\"comment/65\",[]],[\"name/66\",[51,54.723]],[\"comment/66\",[]],[\"name/67\",[52,27.207]],[\"comment/67\",[]],[\"name/68\",[53,54.723]],[\"comment/68\",[]],[\"name/69\",[52,27.207]],[\"comment/69\",[]],[\"name/70\",[54,54.723]],[\"comment/70\",[]],[\"name/71\",[52,27.207]],[\"comment/71\",[]],[\"name/72\",[55,54.723]],[\"comment/72\",[]],[\"name/73\",[56,28.097]],[\"comment/73\",[]],[\"name/74\",[52,27.207]],[\"comment/74\",[]],[\"name/75\",[57,28.097]],[\"comment/75\",[]],[\"name/76\",[58,26.006]],[\"comment/76\",[]],[\"name/77\",[59,54.723]],[\"comment/77\",[]],[\"name/78\",[52,27.207]],[\"comment/78\",[]],[\"name/79\",[56,28.097]],[\"comment/79\",[]],[\"name/80\",[57,28.097]],[\"comment/80\",[]],[\"name/81\",[58,26.006]],[\"comment/81\",[]],[\"name/82\",[60,54.723]],[\"comment/82\",[]],[\"name/83\",[52,27.207]],[\"comment/83\",[]],[\"name/84\",[56,28.097]],[\"comment/84\",[]],[\"name/85\",[57,28.097]],[\"comment/85\",[]],[\"name/86\",[58,26.006]],[\"comment/86\",[]],[\"name/87\",[61,54.723]],[\"comment/87\",[]],[\"name/88\",[52,27.207]],[\"comment/88\",[]],[\"name/89\",[56,28.097]],[\"comment/89\",[]],[\"name/90\",[57,28.097]],[\"comment/90\",[]],[\"name/91\",[58,26.006]],[\"comment/91\",[]],[\"name/92\",[62,54.723]],[\"comment/92\",[]],[\"name/93\",[52,27.207]],[\"comment/93\",[]],[\"name/94\",[56,28.097]],[\"comment/94\",[]],[\"name/95\",[57,28.097]],[\"comment/95\",[]],[\"name/96\",[58,26.006]],[\"comment/96\",[]],[\"name/97\",[63,54.723]],[\"comment/97\",[]],[\"name/98\",[52,27.207]],[\"comment/98\",[]],[\"name/99\",[56,28.097]],[\"comment/99\",[]],[\"name/100\",[57,28.097]],[\"comment/100\",[]],[\"name/101\",[58,26.006]],[\"comment/101\",[]],[\"name/102\",[64,54.723]],[\"comment/102\",[]],[\"name/103\",[52,27.207]],[\"comment/103\",[]],[\"name/104\",[56,28.097]],[\"comment/104\",[]],[\"name/105\",[57,28.097]],[\"comment/105\",[]],[\"name/106\",[58,26.006]],[\"comment/106\",[]],[\"name/107\",[65,54.723]],[\"comment/107\",[]],[\"name/108\",[52,27.207]],[\"comment/108\",[]],[\"name/109\",[66,49.614]],[\"comment/109\",[]],[\"name/110\",[67,54.723]],[\"comment/110\",[]],[\"name/111\",[56,28.097]],[\"comment/111\",[]],[\"name/112\",[1,30.744]],[\"comment/112\",[]],[\"name/113\",[68,54.723]],[\"comment/113\",[]],[\"name/114\",[69,54.723]],[\"comment/114\",[]],[\"name/115\",[57,28.097]],[\"comment/115\",[]],[\"name/116\",[58,26.006]],[\"comment/116\",[]],[\"name/117\",[70,54.723]],[\"comment/117\",[]],[\"name/118\",[52,27.207]],[\"comment/118\",[]],[\"name/119\",[56,28.097]],[\"comment/119\",[]],[\"name/120\",[57,28.097]],[\"comment/120\",[]],[\"name/121\",[58,26.006]],[\"comment/121\",[]],[\"name/122\",[71,54.723]],[\"comment/122\",[]],[\"name/123\",[52,27.207]],[\"comment/123\",[]],[\"name/124\",[56,28.097]],[\"comment/124\",[]],[\"name/125\",[57,28.097]],[\"comment/125\",[]],[\"name/126\",[58,26.006]],[\"comment/126\",[]],[\"name/127\",[72,54.723]],[\"comment/127\",[]],[\"name/128\",[52,27.207]],[\"comment/128\",[]],[\"name/129\",[56,28.097]],[\"comment/129\",[]],[\"name/130\",[57,28.097]],[\"comment/130\",[]],[\"name/131\",[58,26.006]],[\"comment/131\",[]],[\"name/132\",[73,54.723]],[\"comment/132\",[]],[\"name/133\",[52,27.207]],[\"comment/133\",[]],[\"name/134\",[56,28.097]],[\"comment/134\",[]],[\"name/135\",[57,28.097]],[\"comment/135\",[]],[\"name/136\",[58,26.006]],[\"comment/136\",[]],[\"name/137\",[74,54.723]],[\"comment/137\",[]],[\"name/138\",[52,27.207]],[\"comment/138\",[]],[\"name/139\",[56,28.097]],[\"comment/139\",[]],[\"name/140\",[57,28.097]],[\"comment/140\",[]],[\"name/141\",[58,26.006]],[\"comment/141\",[]],[\"name/142\",[75,54.723]],[\"comment/142\",[]],[\"name/143\",[52,27.207]],[\"comment/143\",[]],[\"name/144\",[56,28.097]],[\"comment/144\",[]],[\"name/145\",[57,28.097]],[\"comment/145\",[]],[\"name/146\",[58,26.006]],[\"comment/146\",[]],[\"name/147\",[76,54.723]],[\"comment/147\",[]],[\"name/148\",[52,27.207]],[\"comment/148\",[]],[\"name/149\",[56,28.097]],[\"comment/149\",[]],[\"name/150\",[57,28.097]],[\"comment/150\",[]],[\"name/151\",[58,26.006]],[\"comment/151\",[]],[\"name/152\",[77,54.723]],[\"comment/152\",[]],[\"name/153\",[52,27.207]],[\"comment/153\",[]],[\"name/154\",[56,28.097]],[\"comment/154\",[]],[\"name/155\",[57,28.097]],[\"comment/155\",[]],[\"name/156\",[58,26.006]],[\"comment/156\",[]],[\"name/157\",[78,54.723]],[\"comment/157\",[]],[\"name/158\",[52,27.207]],[\"comment/158\",[]],[\"name/159\",[56,28.097]],[\"comment/159\",[]],[\"name/160\",[57,28.097]],[\"comment/160\",[]],[\"name/161\",[58,26.006]],[\"comment/161\",[]],[\"name/162\",[79,54.723]],[\"comment/162\",[]],[\"name/163\",[52,27.207]],[\"comment/163\",[]],[\"name/164\",[56,28.097]],[\"comment/164\",[]],[\"name/165\",[57,28.097]],[\"comment/165\",[]],[\"name/166\",[58,26.006]],[\"comment/166\",[]],[\"name/167\",[80,54.723]],[\"comment/167\",[]],[\"name/168\",[52,27.207]],[\"comment/168\",[]],[\"name/169\",[56,28.097]],[\"comment/169\",[]],[\"name/170\",[57,28.097]],[\"comment/170\",[]],[\"name/171\",[58,26.006]],[\"comment/171\",[]],[\"name/172\",[81,54.723]],[\"comment/172\",[]],[\"name/173\",[52,27.207]],[\"comment/173\",[]],[\"name/174\",[56,28.097]],[\"comment/174\",[]],[\"name/175\",[57,28.097]],[\"comment/175\",[]],[\"name/176\",[58,26.006]],[\"comment/176\",[]],[\"name/177\",[82,54.723]],[\"comment/177\",[]],[\"name/178\",[83,54.723]],[\"comment/178\",[]],[\"name/179\",[84,54.723]],[\"comment/179\",[]],[\"name/180\",[85,54.723]],[\"comment/180\",[]],[\"name/181\",[86,54.723]],[\"comment/181\",[]],[\"name/182\",[87,54.723]],[\"comment/182\",[]],[\"name/183\",[88,54.723]],[\"comment/183\",[]],[\"name/184\",[89,54.723]],[\"comment/184\",[]],[\"name/185\",[90,54.723]],[\"comment/185\",[]],[\"name/186\",[91,54.723]],[\"comment/186\",[]],[\"name/187\",[92,54.723]],[\"comment/187\",[]],[\"name/188\",[93,54.723]],[\"comment/188\",[]],[\"name/189\",[94,54.723]],[\"comment/189\",[]],[\"name/190\",[95,54.723]],[\"comment/190\",[]],[\"name/191\",[96,54.723]],[\"comment/191\",[]],[\"name/192\",[97,54.723]],[\"comment/192\",[]],[\"name/193\",[98,54.723]],[\"comment/193\",[]],[\"name/194\",[99,54.723]],[\"comment/194\",[]],[\"name/195\",[100,54.723]],[\"comment/195\",[]],[\"name/196\",[101,54.723]],[\"comment/196\",[]],[\"name/197\",[102,54.723]],[\"comment/197\",[]],[\"name/198\",[103,54.723]],[\"comment/198\",[]],[\"name/199\",[104,54.723]],[\"comment/199\",[]],[\"name/200\",[1,30.744]],[\"comment/200\",[]],[\"name/201\",[105,54.723]],[\"comment/201\",[]],[\"name/202\",[106,54.723]],[\"comment/202\",[]],[\"name/203\",[107,54.723]],[\"comment/203\",[]],[\"name/204\",[108,54.723]],[\"comment/204\",[]],[\"name/205\",[109,54.723]],[\"comment/205\",[]],[\"name/206\",[110,54.723]],[\"comment/206\",[]],[\"name/207\",[111,54.723]],[\"comment/207\",[]],[\"name/208\",[112,54.723]],[\"comment/208\",[]],[\"name/209\",[113,54.723]],[\"comment/209\",[]],[\"name/210\",[114,54.723]],[\"comment/210\",[]],[\"name/211\",[115,54.723]],[\"comment/211\",[]],[\"name/212\",[116,54.723]],[\"comment/212\",[]],[\"name/213\",[117,54.723]],[\"comment/213\",[]],[\"name/214\",[118,54.723]],[\"comment/214\",[]],[\"name/215\",[3,27.207]],[\"comment/215\",[]],[\"name/216\",[119,49.614]],[\"comment/216\",[]],[\"name/217\",[120,49.614]],[\"comment/217\",[]],[\"name/218\",[121,54.723]],[\"comment/218\",[]],[\"name/219\",[122,54.723]],[\"comment/219\",[]],[\"name/220\",[4,46.25]],[\"comment/220\",[]],[\"name/221\",[3,27.207]],[\"comment/221\",[]],[\"name/222\",[123,54.723]],[\"comment/222\",[]],[\"name/223\",[3,27.207]],[\"comment/223\",[]],[\"name/224\",[124,43.737]],[\"comment/224\",[]],[\"name/225\",[125,49.614]],[\"comment/225\",[]],[\"name/226\",[126,49.614]],[\"comment/226\",[]],[\"name/227\",[127,46.25]],[\"comment/227\",[]],[\"name/228\",[128,54.723]],[\"comment/228\",[]],[\"name/229\",[3,27.207]],[\"comment/229\",[]],[\"name/230\",[124,43.737]],[\"comment/230\",[]],[\"name/231\",[125,49.614]],[\"comment/231\",[]],[\"name/232\",[126,49.614]],[\"comment/232\",[]],[\"name/233\",[129,54.723]],[\"comment/233\",[]],[\"name/234\",[3,27.207]],[\"comment/234\",[]],[\"name/235\",[124,43.737]],[\"comment/235\",[]],[\"name/236\",[130,54.723]],[\"comment/236\",[]],[\"name/237\",[127,46.25]],[\"comment/237\",[]],[\"name/238\",[131,54.723]],[\"comment/238\",[]],[\"name/239\",[3,27.207]],[\"comment/239\",[]],[\"name/240\",[124,43.737]],[\"comment/240\",[]],[\"name/241\",[56,28.097]],[\"comment/241\",[]],[\"name/242\",[127,46.25]],[\"comment/242\",[]],[\"name/243\",[132,54.723]],[\"comment/243\",[]],[\"name/244\",[3,27.207]],[\"comment/244\",[]],[\"name/245\",[57,28.097]],[\"comment/245\",[]],[\"name/246\",[66,49.614]],[\"comment/246\",[]],[\"name/247\",[133,54.723]],[\"comment/247\",[]],[\"name/248\",[134,54.723]],[\"comment/248\",[]],[\"name/249\",[135,54.723]],[\"comment/249\",[]],[\"name/250\",[136,54.723]],[\"comment/250\",[]],[\"name/251\",[137,54.723]],[\"comment/251\",[]],[\"name/252\",[3,27.207]],[\"comment/252\",[]],[\"name/253\",[138,54.723]],[\"comment/253\",[]],[\"name/254\",[139,54.723]],[\"comment/254\",[]],[\"name/255\",[140,54.723]],[\"comment/255\",[]],[\"name/256\",[141,54.723]],[\"comment/256\",[]],[\"name/257\",[142,54.723]],[\"comment/257\",[]],[\"name/258\",[143,54.723]],[\"comment/258\",[]],[\"name/259\",[144,54.723]],[\"comment/259\",[]],[\"name/260\",[145,54.723]],[\"comment/260\",[]],[\"name/261\",[3,27.207]],[\"comment/261\",[]],[\"name/262\",[146,54.723]],[\"comment/262\",[]],[\"name/263\",[6,49.614]],[\"comment/263\",[]],[\"name/264\",[3,27.207]],[\"comment/264\",[]],[\"name/265\",[8,46.25]],[\"comment/265\",[]],[\"name/266\",[3,27.207]],[\"comment/266\",[]],[\"name/267\",[3,27.207]],[\"comment/267\",[]],[\"name/268\",[119,49.614]],[\"comment/268\",[]],[\"name/269\",[120,49.614]],[\"comment/269\",[]],[\"name/270\",[147,54.723]],[\"comment/270\",[]],[\"name/271\",[148,54.723]],[\"comment/271\",[]],[\"name/272\",[149,54.723]],[\"comment/272\",[]],[\"name/273\",[150,54.723]],[\"comment/273\",[]],[\"name/274\",[151,54.723]],[\"comment/274\",[]],[\"name/275\",[152,54.723]],[\"comment/275\",[]],[\"name/276\",[3,27.207]],[\"comment/276\",[]],[\"name/277\",[153,54.723]],[\"comment/277\",[]],[\"name/278\",[3,27.207]],[\"comment/278\",[]],[\"name/279\",[154,54.723]],[\"comment/279\",[]],[\"name/280\",[155,54.723]],[\"comment/280\",[]],[\"name/281\",[3,27.207]],[\"comment/281\",[]],[\"name/282\",[156,54.723]],[\"comment/282\",[]],[\"name/283\",[3,27.207]],[\"comment/283\",[]],[\"name/284\",[157,54.723]],[\"comment/284\",[]],[\"name/285\",[158,54.723]],[\"comment/285\",[]],[\"name/286\",[1,30.744]],[\"comment/286\",[]],[\"name/287\",[159,33.52]],[\"comment/287\",[]],[\"name/288\",[160,33.52]],[\"comment/288\",[]],[\"name/289\",[161,40.059]],[\"comment/289\",[]],[\"name/290\",[162,40.059]],[\"comment/290\",[]],[\"name/291\",[163,54.723]],[\"comment/291\",[]],[\"name/292\",[1,30.744]],[\"comment/292\",[]],[\"name/293\",[164,41.73]],[\"comment/293\",[]],[\"name/294\",[159,33.52]],[\"comment/294\",[]],[\"name/295\",[160,33.52]],[\"comment/295\",[]],[\"name/296\",[161,40.059]],[\"comment/296\",[]],[\"name/297\",[162,40.059]],[\"comment/297\",[]],[\"name/298\",[165,54.723]],[\"comment/298\",[]],[\"name/299\",[1,30.744]],[\"comment/299\",[]],[\"name/300\",[164,41.73]],[\"comment/300\",[]],[\"name/301\",[159,33.52]],[\"comment/301\",[]],[\"name/302\",[160,33.52]],[\"comment/302\",[]],[\"name/303\",[161,40.059]],[\"comment/303\",[]],[\"name/304\",[162,40.059]],[\"comment/304\",[]],[\"name/305\",[166,54.723]],[\"comment/305\",[]],[\"name/306\",[1,30.744]],[\"comment/306\",[]],[\"name/307\",[164,41.73]],[\"comment/307\",[]],[\"name/308\",[159,33.52]],[\"comment/308\",[]],[\"name/309\",[160,33.52]],[\"comment/309\",[]],[\"name/310\",[161,40.059]],[\"comment/310\",[]],[\"name/311\",[162,40.059]],[\"comment/311\",[]],[\"name/312\",[167,54.723]],[\"comment/312\",[]],[\"name/313\",[1,30.744]],[\"comment/313\",[]],[\"name/314\",[164,41.73]],[\"comment/314\",[]],[\"name/315\",[159,33.52]],[\"comment/315\",[]],[\"name/316\",[160,33.52]],[\"comment/316\",[]],[\"name/317\",[161,40.059]],[\"comment/317\",[]],[\"name/318\",[162,40.059]],[\"comment/318\",[]],[\"name/319\",[168,54.723]],[\"comment/319\",[]],[\"name/320\",[1,30.744]],[\"comment/320\",[]],[\"name/321\",[164,41.73]],[\"comment/321\",[]],[\"name/322\",[159,33.52]],[\"comment/322\",[]],[\"name/323\",[160,33.52]],[\"comment/323\",[]],[\"name/324\",[161,40.059]],[\"comment/324\",[]],[\"name/325\",[162,40.059]],[\"comment/325\",[]],[\"name/326\",[169,54.723]],[\"comment/326\",[]],[\"name/327\",[1,30.744]],[\"comment/327\",[]],[\"name/328\",[159,33.52]],[\"comment/328\",[]],[\"name/329\",[160,33.52]],[\"comment/329\",[]],[\"name/330\",[58,26.006]],[\"comment/330\",[]],[\"name/331\",[170,54.723]],[\"comment/331\",[]],[\"name/332\",[1,30.744]],[\"comment/332\",[]],[\"name/333\",[58,26.006]],[\"comment/333\",[]],[\"name/334\",[159,33.52]],[\"comment/334\",[]],[\"name/335\",[160,33.52]],[\"comment/335\",[]],[\"name/336\",[171,54.723]],[\"comment/336\",[]],[\"name/337\",[1,30.744]],[\"comment/337\",[]],[\"name/338\",[58,26.006]],[\"comment/338\",[]],[\"name/339\",[159,33.52]],[\"comment/339\",[]],[\"name/340\",[160,33.52]],[\"comment/340\",[]],[\"name/341\",[172,54.723]],[\"comment/341\",[]],[\"name/342\",[1,30.744]],[\"comment/342\",[]],[\"name/343\",[58,26.006]],[\"comment/343\",[]],[\"name/344\",[159,33.52]],[\"comment/344\",[]],[\"name/345\",[160,33.52]],[\"comment/345\",[]],[\"name/346\",[173,54.723]],[\"comment/346\",[]],[\"name/347\",[1,30.744]],[\"comment/347\",[]],[\"name/348\",[58,26.006]],[\"comment/348\",[]],[\"name/349\",[159,33.52]],[\"comment/349\",[]],[\"name/350\",[160,33.52]],[\"comment/350\",[]],[\"name/351\",[14,49.614]],[\"comment/351\",[]],[\"name/352\",[1,30.744]],[\"comment/352\",[]],[\"name/353\",[58,26.006]],[\"comment/353\",[]],[\"name/354\",[159,33.52]],[\"comment/354\",[]],[\"name/355\",[160,33.52]],[\"comment/355\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":3,\"name\":{\"3\":{},\"8\":{},\"14\":{},\"24\":{},\"32\":{},\"34\":{},\"54\":{},\"215\":{},\"221\":{},\"223\":{},\"229\":{},\"234\":{},\"239\":{},\"244\":{},\"252\":{},\"261\":{},\"264\":{},\"266\":{},\"267\":{},\"276\":{},\"278\":{},\"281\":{},\"283\":{}},\"comment\":{}}],[\"_inputtype\",{\"_index\":159,\"name\":{\"287\":{},\"294\":{},\"301\":{},\"308\":{},\"315\":{},\"322\":{},\"328\":{},\"334\":{},\"339\":{},\"344\":{},\"349\":{},\"354\":{}},\"comment\":{}}],[\"_outputtype\",{\"_index\":160,\"name\":{\"288\":{},\"295\":{},\"302\":{},\"309\":{},\"316\":{},\"323\":{},\"329\":{},\"335\":{},\"340\":{},\"345\":{},\"350\":{},\"355\":{}},\"comment\":{}}],[\"activestreams\",{\"_index\":23,\"name\":{\"30\":{}},\"comment\":{}}],[\"binarytojsonmessagestream\",{\"_index\":116,\"name\":{\"212\":{}},\"comment\":{}}],[\"caller\",{\"_index\":169,\"name\":{\"326\":{}},\"comment\":{}}],[\"callertypes\",{\"_index\":9,\"name\":{\"10\":{}},\"comment\":{}}],[\"cancel\",{\"_index\":145,\"name\":{\"260\":{}},\"comment\":{}}],[\"clientcaller\",{\"_index\":170,\"name\":{\"331\":{}},\"comment\":{}}],[\"clienthandler\",{\"_index\":163,\"name\":{\"291\":{}},\"comment\":{}}],[\"clienthandlerimplementation\",{\"_index\":141,\"name\":{\"256\":{}},\"comment\":{}}],[\"clientinputtransformstream\",{\"_index\":42,\"name\":{\"57\":{}},\"comment\":{}}],[\"clientmanifest\",{\"_index\":148,\"name\":{\"271\":{}},\"comment\":{}}],[\"clientoutputtransformstream\",{\"_index\":43,\"name\":{\"58\":{}},\"comment\":{}}],[\"clientstreamcaller\",{\"_index\":16,\"name\":{\"18\":{}},\"comment\":{}}],[\"code\",{\"_index\":57,\"name\":{\"75\":{},\"80\":{},\"85\":{},\"90\":{},\"95\":{},\"100\":{},\"105\":{},\"115\":{},\"120\":{},\"125\":{},\"130\":{},\"135\":{},\"140\":{},\"145\":{},\"150\":{},\"155\":{},\"160\":{},\"165\":{},\"170\":{},\"175\":{},\"245\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":1,\"name\":{\"1\":{},\"22\":{},\"112\":{},\"200\":{},\"286\":{},\"292\":{},\"299\":{},\"306\":{},\"313\":{},\"320\":{},\"327\":{},\"332\":{},\"337\":{},\"342\":{},\"347\":{},\"352\":{}},\"comment\":{}}],[\"container\",{\"_index\":162,\"name\":{\"290\":{},\"297\":{},\"304\":{},\"311\":{},\"318\":{},\"325\":{}},\"comment\":{}}],[\"containertype\",{\"_index\":143,\"name\":{\"258\":{}},\"comment\":{}}],[\"data\",{\"_index\":133,\"name\":{\"247\":{}},\"comment\":{}}],[\"defaultclientmiddlewarewrapper\",{\"_index\":122,\"name\":{\"219\":{}},\"comment\":{}}],[\"defaultmiddleware\",{\"_index\":118,\"name\":{\"214\":{}},\"comment\":{}}],[\"defaultservermiddlewarewrapper\",{\"_index\":121,\"name\":{\"218\":{}},\"comment\":{}}],[\"defaulttimeoutmap\",{\"_index\":21,\"name\":{\"28\":{}},\"comment\":{}}],[\"description\",{\"_index\":52,\"name\":{\"67\":{},\"69\":{},\"71\":{},\"74\":{},\"78\":{},\"83\":{},\"88\":{},\"93\":{},\"98\":{},\"103\":{},\"108\":{},\"118\":{},\"123\":{},\"128\":{},\"133\":{},\"138\":{},\"143\":{},\"148\":{},\"153\":{},\"158\":{},\"163\":{},\"168\":{},\"173\":{}},\"comment\":{}}],[\"detail\",{\"_index\":105,\"name\":{\"201\":{}},\"comment\":{}}],[\"duplexcaller\",{\"_index\":171,\"name\":{\"336\":{}},\"comment\":{}}],[\"duplexhandler\",{\"_index\":165,\"name\":{\"298\":{}},\"comment\":{}}],[\"duplexhandlerimplementation\",{\"_index\":139,\"name\":{\"254\":{}},\"comment\":{}}],[\"duplexstreamcaller\",{\"_index\":17,\"name\":{\"19\":{}},\"comment\":{}}],[\"error\",{\"_index\":56,\"name\":{\"73\":{},\"79\":{},\"84\":{},\"89\":{},\"94\":{},\"99\":{},\"104\":{},\"111\":{},\"119\":{},\"124\":{},\"129\":{},\"134\":{},\"139\":{},\"144\":{},\"149\":{},\"154\":{},\"159\":{},\"164\":{},\"169\":{},\"174\":{},\"241\":{}},\"comment\":{}}],[\"errorhandleraborted\",{\"_index\":79,\"name\":{\"162\":{}},\"comment\":{}}],[\"errormissingcaller\",{\"_index\":81,\"name\":{\"172\":{}},\"comment\":{}}],[\"errormissingheader\",{\"_index\":78,\"name\":{\"157\":{}},\"comment\":{}}],[\"errorrpc\",{\"_index\":51,\"name\":{\"66\":{}},\"comment\":{}}],[\"errorrpccallerfailed\",{\"_index\":80,\"name\":{\"167\":{}},\"comment\":{}}],[\"errorrpcconnectioninternal\",{\"_index\":77,\"name\":{\"152\":{}},\"comment\":{}}],[\"errorrpcconnectionkeepalivetimeout\",{\"_index\":76,\"name\":{\"147\":{}},\"comment\":{}}],[\"errorrpcconnectionlocal\",{\"_index\":74,\"name\":{\"137\":{}},\"comment\":{}}],[\"errorrpcconnectionpeer\",{\"_index\":75,\"name\":{\"142\":{}},\"comment\":{}}],[\"errorrpchandlerfailed\",{\"_index\":61,\"name\":{\"87\":{}},\"comment\":{}}],[\"errorrpcmessagelength\",{\"_index\":62,\"name\":{\"92\":{}},\"comment\":{}}],[\"errorrpcmethodnotimplemented\",{\"_index\":73,\"name\":{\"132\":{}},\"comment\":{}}],[\"errorrpcmissingresponse\",{\"_index\":63,\"name\":{\"97\":{}},\"comment\":{}}],[\"errorrpcoutputstreamerror\",{\"_index\":64,\"name\":{\"102\":{}},\"comment\":{}}],[\"errorrpcparse\",{\"_index\":60,\"name\":{\"82\":{}},\"comment\":{}}],[\"errorrpcprotocol\",{\"_index\":55,\"name\":{\"72\":{}},\"comment\":{}}],[\"errorrpcremote\",{\"_index\":65,\"name\":{\"107\":{}},\"comment\":{}}],[\"errorrpcserver\",{\"_index\":53,\"name\":{\"68\":{}},\"comment\":{}}],[\"errorrpcservernotrunning\",{\"_index\":54,\"name\":{\"70\":{}},\"comment\":{}}],[\"errorrpcstopping\",{\"_index\":59,\"name\":{\"77\":{}},\"comment\":{}}],[\"errorrpcstreamended\",{\"_index\":70,\"name\":{\"117\":{}},\"comment\":{}}],[\"errorrpctimedout\",{\"_index\":71,\"name\":{\"122\":{}},\"comment\":{}}],[\"errors\",{\"_index\":50,\"name\":{\"65\":{}},\"comment\":{}}],[\"errorutilsundefinedbehaviour\",{\"_index\":72,\"name\":{\"127\":{}},\"comment\":{}}],[\"eventrpcclient\",{\"_index\":106,\"name\":{\"202\":{}},\"comment\":{}}],[\"eventrpcconnection\",{\"_index\":108,\"name\":{\"204\":{}},\"comment\":{}}],[\"eventrpcconnectionerror\",{\"_index\":110,\"name\":{\"206\":{}},\"comment\":{}}],[\"eventrpcserver\",{\"_index\":107,\"name\":{\"203\":{}},\"comment\":{}}],[\"eventrpcservererror\",{\"_index\":109,\"name\":{\"205\":{}},\"comment\":{}}],[\"eventrpcserverstart\",{\"_index\":113,\"name\":{\"209\":{}},\"comment\":{}}],[\"eventrpcserverstarted\",{\"_index\":114,\"name\":{\"210\":{}},\"comment\":{}}],[\"eventrpcserverstopped\",{\"_index\":112,\"name\":{\"208\":{}},\"comment\":{}}],[\"eventrpcserverstopping\",{\"_index\":111,\"name\":{\"207\":{}},\"comment\":{}}],[\"events\",{\"_index\":103,\"name\":{\"198\":{}},\"comment\":{}}],[\"filtersensitive\",{\"_index\":25,\"name\":{\"33\":{},\"53\":{}},\"comment\":{}}],[\"forward\",{\"_index\":119,\"name\":{\"216\":{},\"268\":{}},\"comment\":{}}],[\"fromerror\",{\"_index\":24,\"name\":{\"31\":{},\"55\":{}},\"comment\":{}}],[\"fromjson\",{\"_index\":67,\"name\":{\"110\":{}},\"comment\":{}}],[\"gethandlertypes\",{\"_index\":44,\"name\":{\"59\":{}},\"comment\":{}}],[\"handle\",{\"_index\":164,\"name\":{\"293\":{},\"300\":{},\"307\":{},\"314\":{},\"321\":{}},\"comment\":{}}],[\"handler\",{\"_index\":158,\"name\":{\"285\":{}},\"comment\":{}}],[\"handleraborted\",{\"_index\":101,\"name\":{\"196\":{}},\"comment\":{}}],[\"handlerimplementation\",{\"_index\":137,\"name\":{\"251\":{}},\"comment\":{}}],[\"handlermap\",{\"_index\":20,\"name\":{\"27\":{}},\"comment\":{}}],[\"handlernotfound\",{\"_index\":88,\"name\":{\"183\":{}},\"comment\":{}}],[\"handlertimeouttime\",{\"_index\":22,\"name\":{\"29\":{}},\"comment\":{}}],[\"handlertype\",{\"_index\":149,\"name\":{\"272\":{}},\"comment\":{}}],[\"handlertypes\",{\"_index\":157,\"name\":{\"284\":{}},\"comment\":{}}],[\"handlestream\",{\"_index\":33,\"name\":{\"44\":{}},\"comment\":{}}],[\"id\",{\"_index\":127,\"name\":{\"227\":{},\"237\":{},\"242\":{}},\"comment\":{}}],[\"idgen\",{\"_index\":4,\"name\":{\"4\":{},\"25\":{},\"220\":{}},\"comment\":{}}],[\"internalerror\",{\"_index\":87,\"name\":{\"182\":{}},\"comment\":{}}],[\"invalidparams\",{\"_index\":86,\"name\":{\"181\":{}},\"comment\":{}}],[\"invalidrequest\",{\"_index\":84,\"name\":{\"179\":{}},\"comment\":{}}],[\"isobject\",{\"_index\":47,\"name\":{\"62\":{}},\"comment\":{}}],[\"jsonmessagetobinarystream\",{\"_index\":117,\"name\":{\"213\":{}},\"comment\":{}}],[\"jsonrpc\",{\"_index\":124,\"name\":{\"224\":{},\"230\":{},\"235\":{},\"240\":{}},\"comment\":{}}],[\"jsonrpcerror\",{\"_index\":132,\"name\":{\"243\":{}},\"comment\":{}}],[\"jsonrpcerrorcode\",{\"_index\":82,\"name\":{\"177\":{}},\"comment\":{}}],[\"jsonrpcmessage\",{\"_index\":136,\"name\":{\"250\":{}},\"comment\":{}}],[\"jsonrpcrequest\",{\"_index\":134,\"name\":{\"248\":{}},\"comment\":{}}],[\"jsonrpcrequestmessage\",{\"_index\":123,\"name\":{\"222\":{}},\"comment\":{}}],[\"jsonrpcrequestnotification\",{\"_index\":128,\"name\":{\"228\":{}},\"comment\":{}}],[\"jsonrpcresponse\",{\"_index\":135,\"name\":{\"249\":{}},\"comment\":{}}],[\"jsonrpcresponseerror\",{\"_index\":131,\"name\":{\"238\":{}},\"comment\":{}}],[\"jsonrpcresponseresult\",{\"_index\":129,\"name\":{\"233\":{}},\"comment\":{}}],[\"jsonvalue\",{\"_index\":151,\"name\":{\"274\":{}},\"comment\":{}}],[\"logger\",{\"_index\":5,\"name\":{\"5\":{},\"26\":{}},\"comment\":{}}],[\"mapcallers\",{\"_index\":150,\"name\":{\"273\":{}},\"comment\":{}}],[\"message\",{\"_index\":66,\"name\":{\"109\":{},\"246\":{}},\"comment\":{}}],[\"meta\",{\"_index\":146,\"name\":{\"262\":{}},\"comment\":{}}],[\"metadata\",{\"_index\":68,\"name\":{\"113\":{}},\"comment\":{}}],[\"method\",{\"_index\":125,\"name\":{\"225\":{},\"231\":{}},\"comment\":{}}],[\"methodnotfound\",{\"_index\":85,\"name\":{\"180\":{}},\"comment\":{}}],[\"methods\",{\"_index\":13,\"name\":{\"15\":{}},\"comment\":{}}],[\"methodsproxy\",{\"_index\":12,\"name\":{\"13\":{}},\"comment\":{}}],[\"middleware\",{\"_index\":115,\"name\":{\"211\":{}},\"comment\":{}}],[\"middlewarefactory\",{\"_index\":8,\"name\":{\"9\":{},\"35\":{},\"265\":{}},\"comment\":{}}],[\"missingcaller\",{\"_index\":102,\"name\":{\"197\":{}},\"comment\":{}}],[\"missingheader\",{\"_index\":100,\"name\":{\"195\":{}},\"comment\":{}}],[\"never\",{\"_index\":49,\"name\":{\"64\":{}},\"comment\":{}}],[\"ontimeoutcallback\",{\"_index\":2,\"name\":{\"2\":{},\"23\":{}},\"comment\":{}}],[\"p\",{\"_index\":154,\"name\":{\"279\":{}},\"comment\":{}}],[\"params\",{\"_index\":126,\"name\":{\"226\":{},\"232\":{}},\"comment\":{}}],[\"parseerror\",{\"_index\":83,\"name\":{\"178\":{}},\"comment\":{}}],[\"parseheadstream\",{\"_index\":45,\"name\":{\"60\":{}},\"comment\":{}}],[\"parsejsonrpcmessage\",{\"_index\":41,\"name\":{\"52\":{}},\"comment\":{}}],[\"parsejsonrpcrequest\",{\"_index\":35,\"name\":{\"46\":{}},\"comment\":{}}],[\"parsejsonrpcrequestmessage\",{\"_index\":36,\"name\":{\"47\":{}},\"comment\":{}}],[\"parsejsonrpcrequestnotification\",{\"_index\":37,\"name\":{\"48\":{}},\"comment\":{}}],[\"parsejsonrpcresponse\",{\"_index\":40,\"name\":{\"51\":{}},\"comment\":{}}],[\"parsejsonrpcresponseerror\",{\"_index\":39,\"name\":{\"50\":{}},\"comment\":{}}],[\"parsejsonrpcresponseresult\",{\"_index\":38,\"name\":{\"49\":{}},\"comment\":{}}],[\"pojo\",{\"_index\":152,\"name\":{\"275\":{}},\"comment\":{}}],[\"promise\",{\"_index\":46,\"name\":{\"61\":{}},\"comment\":{}}],[\"promisedeconstructed\",{\"_index\":153,\"name\":{\"277\":{}},\"comment\":{}}],[\"rawcaller\",{\"_index\":172,\"name\":{\"341\":{}},\"comment\":{}}],[\"rawhandler\",{\"_index\":166,\"name\":{\"305\":{}},\"comment\":{}}],[\"rawhandlerimplementation\",{\"_index\":138,\"name\":{\"253\":{}},\"comment\":{}}],[\"rawstreamcaller\",{\"_index\":18,\"name\":{\"20\":{}},\"comment\":{}}],[\"registerclientstreamhandler\",{\"_index\":32,\"name\":{\"43\":{}},\"comment\":{}}],[\"registerduplexstreamhandler\",{\"_index\":29,\"name\":{\"40\":{}},\"comment\":{}}],[\"registerontimeoutcallback\",{\"_index\":10,\"name\":{\"11\":{},\"36\":{}},\"comment\":{}}],[\"registerrawstreamhandler\",{\"_index\":28,\"name\":{\"39\":{}},\"comment\":{}}],[\"registerserverstreamhandler\",{\"_index\":31,\"name\":{\"42\":{}},\"comment\":{}}],[\"registerunaryhandler\",{\"_index\":30,\"name\":{\"41\":{}},\"comment\":{}}],[\"rejectp\",{\"_index\":156,\"name\":{\"282\":{}},\"comment\":{}}],[\"resolvep\",{\"_index\":155,\"name\":{\"280\":{}},\"comment\":{}}],[\"result\",{\"_index\":130,\"name\":{\"236\":{}},\"comment\":{}}],[\"reverse\",{\"_index\":120,\"name\":{\"217\":{},\"269\":{}},\"comment\":{}}],[\"rpcclient\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"rpcconnectioninternal\",{\"_index\":99,\"name\":{\"194\":{}},\"comment\":{}}],[\"rpcconnectionkeepalivetimeout\",{\"_index\":98,\"name\":{\"193\":{}},\"comment\":{}}],[\"rpcconnectionlocal\",{\"_index\":96,\"name\":{\"191\":{}},\"comment\":{}}],[\"rpcconnectionpeer\",{\"_index\":97,\"name\":{\"192\":{}},\"comment\":{}}],[\"rpcerrorevent\",{\"_index\":104,\"name\":{\"199\":{}},\"comment\":{}}],[\"rpcmessagelength\",{\"_index\":90,\"name\":{\"185\":{}},\"comment\":{}}],[\"rpcmissingresponse\",{\"_index\":91,\"name\":{\"186\":{}},\"comment\":{}}],[\"rpcoutputstreamerror\",{\"_index\":92,\"name\":{\"187\":{}},\"comment\":{}}],[\"rpcremote\",{\"_index\":93,\"name\":{\"188\":{}},\"comment\":{}}],[\"rpcserver\",{\"_index\":19,\"name\":{\"21\":{}},\"comment\":{}}],[\"rpcstopping\",{\"_index\":89,\"name\":{\"184\":{}},\"comment\":{}}],[\"rpcstream\",{\"_index\":144,\"name\":{\"259\":{}},\"comment\":{}}],[\"rpcstreamended\",{\"_index\":94,\"name\":{\"189\":{}},\"comment\":{}}],[\"rpctimedout\",{\"_index\":95,\"name\":{\"190\":{}},\"comment\":{}}],[\"servercaller\",{\"_index\":173,\"name\":{\"346\":{}},\"comment\":{}}],[\"serverhandler\",{\"_index\":167,\"name\":{\"312\":{}},\"comment\":{}}],[\"serverhandlerimplementation\",{\"_index\":140,\"name\":{\"255\":{}},\"comment\":{}}],[\"servermanifest\",{\"_index\":147,\"name\":{\"270\":{}},\"comment\":{}}],[\"serverstreamcaller\",{\"_index\":15,\"name\":{\"17\":{}},\"comment\":{}}],[\"sleep\",{\"_index\":48,\"name\":{\"63\":{}},\"comment\":{}}],[\"start\",{\"_index\":26,\"name\":{\"37\":{}},\"comment\":{}}],[\"stop\",{\"_index\":27,\"name\":{\"38\":{}},\"comment\":{}}],[\"streamfactory\",{\"_index\":6,\"name\":{\"6\":{},\"263\":{}},\"comment\":{}}],[\"streamkeepalivetimeouttime\",{\"_index\":11,\"name\":{\"12\":{}},\"comment\":{}}],[\"timeout\",{\"_index\":161,\"name\":{\"289\":{},\"296\":{},\"303\":{},\"310\":{},\"317\":{},\"324\":{}},\"comment\":{}}],[\"toerror\",{\"_index\":7,\"name\":{\"7\":{},\"56\":{}},\"comment\":{}}],[\"tojson\",{\"_index\":69,\"name\":{\"114\":{}},\"comment\":{}}],[\"type\",{\"_index\":58,\"name\":{\"76\":{},\"81\":{},\"86\":{},\"91\":{},\"96\":{},\"101\":{},\"106\":{},\"116\":{},\"121\":{},\"126\":{},\"131\":{},\"136\":{},\"141\":{},\"146\":{},\"151\":{},\"156\":{},\"161\":{},\"166\":{},\"171\":{},\"176\":{},\"330\":{},\"333\":{},\"338\":{},\"343\":{},\"348\":{},\"353\":{}},\"comment\":{}}],[\"unarycaller\",{\"_index\":14,\"name\":{\"16\":{},\"351\":{}},\"comment\":{}}],[\"unaryhandler\",{\"_index\":168,\"name\":{\"319\":{}},\"comment\":{}}],[\"unaryhandlerimplementation\",{\"_index\":142,\"name\":{\"257\":{}},\"comment\":{}}],[\"utils\",{\"_index\":34,\"name\":{\"45\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/docs/classes/callers.Caller.html b/docs/classes/Caller.html similarity index 60% rename from docs/classes/callers.Caller.html rename to docs/classes/Caller.html index 126f9e5..4e4d233 100644 --- a/docs/classes/callers.Caller.html +++ b/docs/classes/Caller.html @@ -13,26 +13,25 @@
+
  • Caller
  • Class Caller<Input, Output>Abstract

    Type Parameters

    +

    Output extends JSONValue = JSONValue

    Hierarchy

    -
    +
  • constructor
  • +
  • _inputType
  • +
  • _outputType
  • +
  • type
  • Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/classes/handlers.ClientHandler.html b/docs/classes/ClientHandler.html similarity index 60% rename from docs/classes/handlers.ClientHandler.html rename to docs/classes/ClientHandler.html index 56d4e04..340d0d7 100644 --- a/docs/classes/handlers.ClientHandler.html +++ b/docs/classes/ClientHandler.html @@ -13,22 +13,21 @@
    +
  • ClientHandler
  • Class ClientHandler<Container, Input, Output>Abstract

    Type Parameters

    +

    Output extends JSONValue = JSONValue

    Hierarchy

      -
    • Handler<Container, Input, Output> +
    • Handler<Container, Input, Output>
      • ClientHandler
    +
  • constructor
  • +
  • _inputType
  • +
  • _outputType
  • +
  • container
  • +
  • timeout?
  • Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/classes/RPCClient.html b/docs/classes/RPCClient.html index 8ce78c7..17e9da5 100644 --- a/docs/classes/RPCClient.html +++ b/docs/classes/RPCClient.html @@ -14,30 +14,18 @@ -

    Class RPCClient<M>

    -
    -

    You must provide an error handler addEventListener('error'). -Otherwise, errors will just be ignored.

    -

    Events:

    - -
    +

    Class RPCClient<M>

    Type Parameters

    +

    M extends ClientManifest

    Hierarchy

      -
    • CreateDestroy -
        -
      • RPCClient
    @@ -45,12 +33,11 @@

    Constructors

    -
    +
    -

    Parameters

    • -
      __namedParameters: {
          idGen: IdGen;
          logger: Logger;
          manifest: M;
          middlewareFactory: MiddlewareFactory<Uint8Array, JSONRPCRequest<JSONValue>, JSONRPCResponse<JSONValue>, Uint8Array>;
          streamFactory: StreamFactory;
          streamKeepAliveTimeoutTime: number;
      }
      +
      obj: {
          idGen?: IdGen;
          logger?: Logger;
          manifest: M;
          middlewareFactory?: MiddlewareFactory<Uint8Array, JSONRPCRequest<JSONValue>, JSONRPCResponse<JSONValue>, Uint8Array>;
          streamFactory: StreamFactory;
          streamKeepAliveTimeoutTime?: number;
          toError?: ((errorData: JSONValue, metadata: Record<string, JSONValue>) => ErrorRPC<any>);
      }
      • -
        idGen: IdGen
      • +
        Optional idGen?: IdGen
      • -
        logger: Logger
      • +
        Optional logger?: Logger
      • -
        manifest: M
      • +
        manifest: M
        +

        Client manifest that defines the types for the rpc +methods.

        +
      • -
        middlewareFactory: MiddlewareFactory<Uint8Array, JSONRPCRequest<JSONValue>, JSONRPCResponse<JSONValue>, Uint8Array>
      • +
        Optional middlewareFactory?: MiddlewareFactory<Uint8Array, JSONRPCRequest<JSONValue>, JSONRPCResponse<JSONValue>, Uint8Array>
        +

        Middleware used to process the rpc messages. +The middlewareFactory needs to be a function that creates a pair of +transform streams that convert JSONRPCRequest to Uint8Array on the forward +path and Uint8Array to JSONRPCResponse on the reverse path.

        +
        +
      • +
        streamFactory: StreamFactory
        +

        An arrow function that when called, creates a +new stream for each rpc method call.

        +
      • -
        streamFactory: StreamFactory
      • +
        Optional streamKeepAliveTimeoutTime?: number
        +

        Timeout time used if no timeout timer was provided when making a call. +Defaults to 60,000 milliseconds. +for a client call.

        +
      • -
        streamKeepAliveTimeoutTime: number
    +
    Optional toError?: ((errorData: JSONValue, metadata: Record<string, JSONValue>) => ErrorRPC<any>)
    +

    Returns RPCClient<M>

    +
  • Defined in src/RPCClient.ts:83
  • Properties

    -
    - -
    [initLock]: RWLockWriter
    -
    callerTypes: Record<string, HandlerType>
    +
  • Defined in src/RPCClient.ts:38
  • -
    idGen: IdGen
    +
  • Defined in src/RPCClient.ts:28
  • logger: Logger
    +
  • Defined in src/RPCClient.ts:29
  • methodsProxy: {} = ...
    @@ -147,12 +147,12 @@
      +
    • Defined in src/RPCClient.ts:44
    • -
      middlewareFactory: MiddlewareFactory<Uint8Array, JSONRPCRequest<JSONValue>, JSONRPCResponse<JSONValue>, Uint8Array>
      +
    • Defined in src/RPCClient.ts:32
    • onTimeoutCallback?: (() => void)
      @@ -165,112 +165,55 @@

      Type declaration

    • Returns void

    • +
    • Defined in src/RPCClient.ts:27
    • -
      streamFactory: StreamFactory
      +
    • Defined in src/RPCClient.ts:30
    • streamKeepAliveTimeoutTime: number
      -
      -

      Accessors

      -
      - -
        -
      • get [destroyed](): boolean
      • -
      • -

        Returns boolean

      -
      - -
        -
      • get [eventHandled](): ReadonlyWeakSet<Event>
      • -
      • -

        Returns ReadonlyWeakSet<Event>

      -
      - -
        -
      • get [eventHandlers](): ReadonlyMap<string, Set<EventHandlerInfo>>
      • -
      • -

        Returns ReadonlyMap<string, Set<EventHandlerInfo>>

      -
      - -
        -
      • get [eventTarget](): EventTarget
      • -
      • -

        Returns EventTarget

      -
      - -
        -
      • get [handleEventError](): ((evt: EventError) => void)
      • -
      • -

        Returns ((evt: EventError) => void)

        +
      • Defined in src/RPCClient.ts:43
      +
      + +
      toError?: ((errorData: any, clientMetadata?: any) => ErrorRPC<any>)
      +
      +

      Type declaration

      • -
          -
        • (evt: EventError): void
        • +
            +
          • (errorData: any, clientMetadata?: any): ErrorRPC<any>
          • +

            Deserializes an error response object into an ErrorRPCRemote instance.

            + +

            Returns

            The deserialized ErrorRPCRemote instance.

            + +

            Throws

            If the errorResponse object is invalid.

            +

            Parameters

            • -
              evt: EventError
            -

            Returns void

      -
      - -
        -
      • get [status](): Status
      • -
      • -

        Returns Status

      • +
      • +
        Optional clientMetadata: any
      +

      Returns ErrorRPC<any>

      +
    • Defined in src/RPCClient.ts:31
    • +
      +

      Accessors

      +
    • Defined in src/RPCClient.ts:117
    • Methods

      -
      - -
        - -
      • -
        -

        Parameters

        -
          -
        • -
          type: string
        • -
        • -
          callback: null | EventListenerOrEventListenerObject
        • -
        • -
          Optional options: boolean | AddEventListenerOptions
        -

        Returns void

      +

      O extends JSONValue

      Parameters

        @@ -303,46 +246,11 @@
        ctx: PartialReturns Promise<{
            output: Promise<O>;
            writable: WritableStream<I>;
        }>
      -
      - -
        - -
      • -
        -

        Parameters

        -
          -
        • -
          __namedParameters: {
              errorCode?: number;
              errorMessage?: string;
              force?: boolean;
          } = {}
          -
            -
          • -
            Optional errorCode?: number
          • -
          • -
            Optional errorMessage?: string
          • -
          • -
            Optional force?: boolean
        -

        Returns Promise<void>

      -
      - -
        - -
      • -
        -

        Parameters

        -
          -
        • -
          event: Event
        -

        Returns boolean

      +
    • Defined in src/RPCClient.ts:194
      • - +
      • Generic caller for duplex RPC calls. This returns a ReadableWritablePair of the types specified. No validation @@ -356,9 +264,9 @@

        I extends JSONValue

      • -

        O extends JSONValue

      +

      O extends JSONValue

      Parameters

        @@ -370,13 +278,13 @@
        method: string
        ctx: Partial<ContextTimedInput> = {}

        ContextTimed used for timeouts and cancellation.

      -

      Returns Promise<RPCStream<O, I, POJO>>

        - +
      • Generic caller for raw RPC calls. This returns a ReadableWritablePair of the raw RPC stream. @@ -393,7 +301,7 @@

        method: string

        Method name of the RPC call

      • -
        headerParams: JSONValue
        +
        headerParams: JSONValue

        Parameters for the header message. The header is a single RPC message that is sent to specify the method for the RPC call. Any metadata of extra parameters is provided here.

        @@ -402,9 +310,9 @@
        headerParams: Partial<ContextTimedInput> = {}

        ContextTimed used for timeouts and cancellation.

      -

      Returns Promise<RPCStream<Uint8Array, Uint8Array, Record<string, JSONValue> & {
          command: string;
          result: JSONValue;
      }>>

        @@ -423,25 +331,7 @@
        callback: (Returns void

      Returns void

      -
      - -
        - -
      • -
        -

        Parameters

        -
          -
        • -
          type: string
        • -
        • -
          callback: null | EventListenerOrEventListenerObject
        • -
        • -
          Optional options: boolean | EventListenerOptions
        -

        Returns void

      +
    • Defined in src/RPCClient.ts:39
    • +

      O extends JSONValue

      Parameters

        @@ -477,7 +367,7 @@
        ctx: PartialReturns Promise<ReadableStream<O>>
      +
    • Defined in src/RPCClient.ts:166
    • +

      O extends JSONValue

      Parameters

      -
      - -
        - -
      • -
        -

        Type Parameters

        -
        -
        -

        Parameters

        -
          -
        • -
          obj: {
              idGen: IdGen;
              logger?: Logger;
              manifest: M;
              middlewareFactory?: MiddlewareFactory<Uint8Array, JSONRPCRequest<JSONValue>, JSONRPCResponse<JSONValue>, Uint8Array>;
              streamFactory: StreamFactory;
              streamKeepAliveTimeoutTime?: number;
          }
          -
            -
          • -
            idGen: IdGen
          • -
          • -
            Optional logger?: Logger
          • -
          • -
            manifest: M
            -

            Client manifest that defines the types for the rpc -methods.

            -
          • -
          • -
            Optional middlewareFactory?: MiddlewareFactory<Uint8Array, JSONRPCRequest<JSONValue>, JSONRPCResponse<JSONValue>, Uint8Array>
            -

            Middleware used to process the rpc messages. -The middlewareFactory needs to be a function that creates a pair of -transform streams that convert JSONRPCRequest to Uint8Array on the forward -path and Uint8Array to JSONRPCResponse on the reverse path.

            -
          • -
          • -
            streamFactory: StreamFactory
            -

            An arrow function that when called, creates a -new stream for each rpc method call.

            -
          • -
          • -
            Optional streamKeepAliveTimeoutTime?: number
            -

            Timeout time used if no timeout timer was provided when making a call. -Defaults to 60,000 milliseconds. -for a client call.

            -
        -

        Returns Promise<RPCClient<M>>

      +
    • Defined in src/RPCClient.ts:130
    • +
    • unaryCaller
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/classes/RPCServer.html b/docs/classes/RPCServer.html index 95e08b6..4ef2cf1 100644 --- a/docs/classes/RPCServer.html +++ b/docs/classes/RPCServer.html @@ -15,25 +15,15 @@
    • @matrixai/rpc
    • RPCServer
    • Class RPCServer

      -
      -

      You must provide an error handler addEventListener('error'). -Otherwise, errors will just be ignored.

      -

      Events:

      - -

      Hierarchy

        -
      • CreateDestroy
      • -
      • EventTarget +
      • StartStop
        • RPCServer
      +
    • Defined in src/RPCServer.ts:45
    • +
    • Defined in src/RPCServer.ts:53
    • @@ -56,21 +46,20 @@

      Properties

      logger middlewareFactory onTimeoutCallback? -toError

      Accessors

      -

      Methods

      Constructors

    • -
      Optional fromError?: ((error: ErrorRPC<any>) => JSONValue)
      +
      Optional fromError?: ((error: ErrorRPC<any>) => JSONValue)
    • +

      Returns JSONValue

    • Optional handlerTimeoutTime?: number
    • -
      idGen: IdGen
    • -
    • -
      logger: Logger
    • +
      Optional idGen?: IdGen
    • -
      manifest: ServerManifest
    • -
    • -
      middlewareFactory: MiddlewareFactory<JSONRPCRequest<JSONValue>, Uint8Array, Uint8Array, JSONRPCResponseResult<JSONValue>>
    • +
      Optional logger?: Logger
    • -
      Optional toError?: ((errorResponse: any, metadata?: any) => ErrorRPCRemote<any>)
      -
        -
      • -
          -
        • (errorResponse: any, metadata?: any): ErrorRPCRemote<any>
        • -
        • -
          -

          Parameters

          -
            -
          • -
            errorResponse: any
          • -
          • -
            Optional metadata: any
          -

          Returns ErrorRPCRemote<any>

    • +
      Optional middlewareFactory?: MiddlewareFactory<JSONRPCRequest<JSONValue>, Uint8Array, Uint8Array, JSONRPCResponseResult<JSONValue>>

      Returns RPCServer

      +
    • Defined in src/RPCServer.ts:90
    • Properties

      [initLock]: RWLockWriter
      +
    • Defined in node_modules/@matrixai/async-init/dist/StartStop.d.ts:9
    • activeStreams: Set<PromiseCancellable<void>> = ...
      +
    • Defined in src/RPCServer.ts:60
    • defaultTimeoutMap: Map<string, undefined | number> = ...
      +
    • Defined in src/RPCServer.ts:58
    • filterSensitive: ((key: string, value: any) => any)
      @@ -189,50 +164,50 @@
      key: string
      value: any

      Returns any

      +
    • Defined in src/RPCServer.ts:62
    • -
      fromError: ((error: ErrorRPC<any>) => JSONValue)
      +
      fromError: ((error: ErrorRPC<any>) => JSONValue)

      Type declaration

      +
    • Defined in src/RPCServer.ts:61
    • -
      handlerMap: Map<string, RawHandlerImplementation> = ...
      +
    • Defined in src/RPCServer.ts:57
    • handlerTimeoutTime: number
      +
    • Defined in src/RPCServer.ts:59
    • -
      idGen: IdGen
      +
    • Defined in src/RPCServer.ts:55
    • logger: Logger
      +
    • Defined in src/RPCServer.ts:56
    • -
      middlewareFactory: MiddlewareFactory<JSONRPCRequest<JSONValue>, Uint8Array, Uint8Array, JSONRPCResponseResult<JSONValue>>
      +
    • Defined in src/RPCServer.ts:63
    • onTimeoutCallback?: (() => void)
      @@ -245,45 +220,16 @@

      Type declaration

    • Returns void

    • -
      - -
      toError: ((errorResponse: any, metadata?: any) => ErrorRPCRemote<any>)
      -
      -

      Type declaration

      -
        -
      • -
          -
        • (errorResponse: any, metadata?: any): ErrorRPCRemote<any>
        • -
        • -
          -

          Parameters

          -
            -
          • -
            errorResponse: any
          • -
          • -
            Optional metadata: any
          -

          Returns ErrorRPCRemote<any>

      +
    • Defined in src/RPCServer.ts:54
    • Accessors

      -
      - -
        -
      • get [destroyed](): boolean
      • -
      • -

        Returns boolean

      • get [eventHandled](): ReadonlyWeakSet<Event>
      • Returns ReadonlyWeakSet<Event>

      @@ -292,7 +238,7 @@
      @@ -301,7 +247,7 @@
      @@ -313,7 +259,7 @@

      Returns (
      • -
      • (evt: EventError): void
      • +
      • (evt: EventError): void
      • Parameters

        @@ -321,18 +267,36 @@

        Parameters

      • evt: EventError

      Returns void

    • +
      + +
        +
      • get [running](): boolean
      • +
      • +

        Returns boolean

      +
      + +
        +
      • get [statusP](): Promise<Status>
      • +
      • +

        Returns Promise<Status>

      • get [status](): Status
      • Returns Status

      +
    • Defined in node_modules/@matrixai/async-init/dist/StartStop.d.ts:7
    • Methods

      @@ -340,14 +304,6 @@
      -
      - -
        - -
      • -
        -

        Parameters

        -
          -
        • -
          force: boolean = true
        -

        Returns Promise<void>

      +
    • Defined in node_modules/@matrixai/events/dist/Evented.d.ts:9
      • -

        Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.

        -

        Parameters

        • event: Event

        Returns boolean

      +
    • Defined in node_modules/@matrixai/events/dist/Evented.d.ts:11
    • Returns void

      +
    • Defined in src/RPCServer.ts:434
    • Parameters

      Returns void

      +
    • Defined in src/RPCServer.ts:412
      • - +
      • The ID is generated only once when the function is called and stored in the id variable. the ID is associated with the entire stream @@ -444,21 +384,21 @@

      +

      O extends JSONValue

      Parameters

      Returns void

      +
    • Defined in src/RPCServer.ts:246
      • @@ -477,11 +417,11 @@
        callback: (Returns void

      Returns void

      +
    • Defined in src/RPCServer.ts:70
      • - +
      • Registers a raw stream handler. This is the basis for all handlers as handling the streams is done with raw streams only. @@ -494,67 +434,65 @@

        Parameters

      • method: string
      • -
        handler: RawHandlerImplementation
      • +
        handler: RawHandlerImplementation
      • timeout: undefined | number

      Returns void

      +
    • Defined in src/RPCServer.ts:222
    • Parameters

      Returns void

      +
    • Defined in src/RPCServer.ts:390
    • Parameters

      Returns void

      +
    • Defined in src/RPCServer.ts:368
      • -

        Removes the event listener in target's event listener list with the same type, callback, and options.

        -

        Parameters

          @@ -565,86 +503,49 @@
          callback: nullOptional options: boolean | EventListenerOptions

        Returns void

      -
      - -
        - +
      • Defined in node_modules/@matrixai/events/dist/Evented.d.ts:10
      +
      + +
        +
      • -

        Creates RPC server.

        +

        Starts RPC server.

        Parameters

        • -
          obj: {
              filterSensitive?: ((key: string, value: any) => any);
              fromError?: ((error: ErrorRPC<any>) => JSONValue);
              handlerTimeoutTime?: number;
              idGen: IdGen;
              logger?: Logger;
              manifest: ServerManifest;
              middlewareFactory?: MiddlewareFactory<JSONRPCRequest<JSONValue>, Uint8Array, Uint8Array, JSONRPCResponse<JSONValue>>;
              toError?: ((errorResponse: any, metadata?: any) => ErrorRPCRemote<any>);
          }
          +
          obj: {
              manifest: ServerManifest;
          }
          • -
            Optional filterSensitive?: ((key: string, value: any) => any)
            -
              -
            • -
                -
              • (key: string, value: any): any
              • +
                manifest: ServerManifest
                +

                Server manifest used to define the rpc method handlers.

                +
        +

        Returns Promise<void>

      +
      + +
        +
      • Parameters

        • -
          key: string
        • -
        • -
          value: any
        -

        Returns any

      -
    • -
      Optional fromError?: ((error: ErrorRPC<any>) => JSONValue)
      +
      __namedParameters: {
          force?: boolean;
          reason?: any;
      }
    • -
    • -
      Optional handlerTimeoutTime?: number
    • -
    • -
      idGen: IdGen
    • -
    • -
      Optional logger?: Logger
    • -
    • -
      manifest: ServerManifest
      -

      Server manifest used to define the rpc method -handlers.

      -
    • -
      Optional middlewareFactory?: MiddlewareFactory<JSONRPCRequest<JSONValue>, Uint8Array, Uint8Array, JSONRPCResponse<JSONValue>>
      -

      Middleware used to process the rpc messages. -The middlewareFactory needs to be a function that creates a pair of -transform streams that convert Uint8Array to JSONRPCRequest on the forward -path and JSONRPCResponse to Uint8Array on the reverse path.

      -
    • +
      Optional force?: boolean
    • -
      Optional toError?: ((errorResponse: any, metadata?: any) => ErrorRPCRemote<any>)
      -
        -
      • -
          -
        • (errorResponse: any, metadata?: any): ErrorRPCRemote<any>
        • -
        • -
          -

          Parameters

          -
            -
          • -
            errorResponse: any
          • -
          • -
            Optional metadata: any
          -

          Returns ErrorRPCRemote<any>

    • -

      Returns Promise<RPCServer>

      +
    • Defined in src/RPCServer.ts:184
    • +
    • start
    • +
    • stop
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/classes/callers.RawCaller.html b/docs/classes/RawCaller.html similarity index 62% rename from docs/classes/callers.RawCaller.html rename to docs/classes/RawCaller.html index dc76dca..8e860e2 100644 --- a/docs/classes/callers.RawCaller.html +++ b/docs/classes/RawCaller.html @@ -13,13 +13,12 @@

      Hierarchy

      data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -137,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:83
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -176,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -223,7 +221,7 @@
      @@ -241,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -268,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorMissingCaller.html b/docs/classes/errors.ErrorMissingCaller.html index dbe458b..c081009 100644 --- a/docs/classes/errors.ErrorMissingCaller.html +++ b/docs/classes/errors.ErrorMissingCaller.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:73
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -80,14 +81,18 @@

          Parameters

        • Optional message: string
        • -
          Optional options: {
              cause: Error;
          }
          +
          Optional options: {
              cause?: T;
              data?: POJO;
              timestamp?: Date;
          }
          • -
            cause: Error
        +
        Optional cause?: T
        +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date

      Returns ErrorMissingCaller<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -96,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:75
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -137,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:74
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -176,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -223,7 +221,7 @@
      @@ -241,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -268,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorMissingHeader.html b/docs/classes/errors.ErrorMissingHeader.html index 58477c9..68cbb4a 100644 --- a/docs/classes/errors.ErrorMissingHeader.html +++ b/docs/classes/errors.ErrorMissingHeader.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:77
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -80,14 +81,18 @@

          Parameters

        • Optional message: string
        • -
          Optional options: {
              cause: Error;
          }
          +
          Optional options: {
              cause?: T;
              data?: POJO;
              timestamp?: Date;
          }
          • -
            cause: Error
        +
        Optional cause?: T
        +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date

      Returns ErrorMissingHeader<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -96,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:79
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -137,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:78
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -176,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -223,7 +221,7 @@
      @@ -241,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -268,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPC.html b/docs/classes/errors.ErrorRPC.html index b215beb..922a7e1 100644 --- a/docs/classes/errors.ErrorRPC.html +++ b/docs/classes/errors.ErrorRPC.html @@ -28,32 +28,11 @@

      Hierarchy

      -
      -

      Implements

      -
        -
      • RPCError
      @@ -61,26 +40,23 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -104,34 +80,31 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorRPC<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      -
      - -
      _description: string = 'Generic Error'
      cause: T

      Causation of the exception Can be used to know what caused this exception

      -
      - -
      code: number
      data: POJO
      @@ -143,21 +116,18 @@
      message: string
      name: string
      stack?: string
      @@ -170,19 +140,12 @@
      -
      - -
      type: string
      -
      +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:6
    • prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -216,26 +179,15 @@

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -321,31 +273,25 @@

      @matrixai/rpc diff --git a/docs/classes/errors.ErrorRPCCallerFailed.html b/docs/classes/errors.ErrorRPCCallerFailed.html index 5979b51..f7592ab 100644 --- a/docs/classes/errors.ErrorRPCCallerFailed.html +++ b/docs/classes/errors.ErrorRPCCallerFailed.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:68
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -80,14 +81,18 @@

          Parameters

        • Optional message: string
        • -
          Optional options: {
              cause: Error;
          }
          +
          Optional options: {
              cause?: T;
              data?: POJO;
              timestamp?: Date;
          }
          • -
            cause: Error
        +
        Optional cause?: T
        +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date

      Returns ErrorRPCCallerFailed<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -96,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:70
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -137,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:69
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -176,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -223,7 +221,7 @@
      @@ -241,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -268,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCConnectionInternal.html b/docs/classes/errors.ErrorRPCConnectionInternal.html index 2ee7a5a..0365f16 100644 --- a/docs/classes/errors.ErrorRPCConnectionInternal.html +++ b/docs/classes/errors.ErrorRPCConnectionInternal.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:198
    • @@ -36,7 +36,7 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +79,20 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorRPCConnectionInternal<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -91,39 +101,39 @@
      code: JSONRPCErrorCode = JSONRPCErrorCode.RPCConnectionInternal
      +
    • Defined in src/errors.ts:200
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -132,23 +142,27 @@
      type: string
      +
    • Defined in src/errors.ts:47
    • -
      description: string = 'RPC Connection internal error'
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:199
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -171,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -218,7 +221,7 @@
      @@ -236,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -263,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html b/docs/classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html index 375f832..04f8936 100644 --- a/docs/classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html +++ b/docs/classes/errors.ErrorRPCConnectionKeepAliveTimeOut.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:193
    • @@ -36,7 +36,7 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +79,20 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorRPCConnectionKeepAliveTimeOut<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -91,39 +101,39 @@
      code: JSONRPCErrorCode = JSONRPCErrorCode.RPCConnectionKeepAliveTimeOut
      +
    • Defined in src/errors.ts:195
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -132,23 +142,27 @@
      type: string
      +
    • Defined in src/errors.ts:47
    • -
      description: string = 'RPC Connection keep alive timeout'
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:194
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -171,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -218,7 +221,7 @@
      @@ -236,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -263,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCConnectionLocal.html b/docs/classes/errors.ErrorRPCConnectionLocal.html index f695d48..a9b2c4e 100644 --- a/docs/classes/errors.ErrorRPCConnectionLocal.html +++ b/docs/classes/errors.ErrorRPCConnectionLocal.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:183
    • @@ -36,7 +36,7 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +79,20 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorRPCConnectionLocal<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -91,39 +101,39 @@
      code: JSONRPCErrorCode = JSONRPCErrorCode.RPCConnectionLocal
      +
    • Defined in src/errors.ts:185
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -132,23 +142,27 @@
      type: string
      +
    • Defined in src/errors.ts:47
    • -
      description: string = 'RPC Connection local error'
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:184
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -171,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -218,7 +221,7 @@
      @@ -236,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -263,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCConnectionPeer.html b/docs/classes/errors.ErrorRPCConnectionPeer.html index 2fd70d2..9ff2f0c 100644 --- a/docs/classes/errors.ErrorRPCConnectionPeer.html +++ b/docs/classes/errors.ErrorRPCConnectionPeer.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:188
    • @@ -36,7 +36,7 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +79,20 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorRPCConnectionPeer<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -91,39 +101,39 @@
      code: JSONRPCErrorCode = JSONRPCErrorCode.RPCConnectionPeer
      +
    • Defined in src/errors.ts:190
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -132,23 +142,27 @@
      type: string
      +
    • Defined in src/errors.ts:47
    • -
      description: string = 'RPC Connection peer error'
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:189
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -171,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -218,7 +221,7 @@
      @@ -236,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -263,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCHandlerFailed.html b/docs/classes/errors.ErrorRPCHandlerFailed.html index 863c777..7470a47 100644 --- a/docs/classes/errors.ErrorRPCHandlerFailed.html +++ b/docs/classes/errors.ErrorRPCHandlerFailed.html @@ -27,11 +27,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:63
    • @@ -39,25 +39,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -83,14 +84,18 @@

          Parameters

        • Optional message: string
        • -
          Optional options: {
              cause: Error;
          }
          +
          Optional options: {
              cause?: T;
              data?: POJO;
              timestamp?: Date;
          }
          • -
            cause: Error
        +
        Optional cause?: T
        +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date

      Returns ErrorRPCHandlerFailed<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -99,39 +104,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:65
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -140,23 +145,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:64
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -179,37 +188,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -226,7 +224,7 @@
      @@ -244,7 +242,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -271,7 +269,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCMessageLength.html b/docs/classes/errors.ErrorRPCMessageLength.html index 9a8a238..17eaf7c 100644 --- a/docs/classes/errors.ErrorRPCMessageLength.html +++ b/docs/classes/errors.ErrorRPCMessageLength.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:87
    • @@ -36,7 +36,7 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +79,20 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorRPCMessageLength<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -91,39 +101,39 @@
      code: JSONRPCErrorCode = JSONRPCErrorCode.RPCMessageLength
      +
    • Defined in src/errors.ts:89
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -132,23 +142,27 @@
      type: string
      +
    • Defined in src/errors.ts:47
    • -
      description: string = 'RPC Message exceeds maximum size'
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:88
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -171,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -218,7 +221,7 @@
      @@ -236,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -263,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCMethodNotImplemented.html b/docs/classes/errors.ErrorRPCMethodNotImplemented.html index febe610..63365b0 100644 --- a/docs/classes/errors.ErrorRPCMethodNotImplemented.html +++ b/docs/classes/errors.ErrorRPCMethodNotImplemented.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:177
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +79,20 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorRPCMethodNotImplemented<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -91,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:180
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -132,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:178
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -171,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -218,7 +221,7 @@
      @@ -236,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -263,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCMissingResponse.html b/docs/classes/errors.ErrorRPCMissingResponse.html index 3520995..f5db15c 100644 --- a/docs/classes/errors.ErrorRPCMissingResponse.html +++ b/docs/classes/errors.ErrorRPCMissingResponse.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:92
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +79,20 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorRPCMissingResponse<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -91,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:94
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -132,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:93
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -171,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -218,7 +221,7 @@
      @@ -236,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -263,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCOutputStreamError.html b/docs/classes/errors.ErrorRPCOutputStreamError.html index 6da1051..7d80628 100644 --- a/docs/classes/errors.ErrorRPCOutputStreamError.html +++ b/docs/classes/errors.ErrorRPCOutputStreamError.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:97
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,13 +79,20 @@

          T

      Parameters

      • -
        message: string
      • +
        Optional message: string
      • -
        options: ErrorRPCOutputStreamErrorOptions
      +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date

      Returns ErrorRPCOutputStreamError<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -93,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:99
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -134,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
      + +
      error: string = 'RPC Protocol Error'
      +
    • Defined in src/errors.ts:45
    • prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -173,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -220,7 +221,7 @@
      @@ -238,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -265,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCParse.html b/docs/classes/errors.ErrorRPCParse.html index 123ff97..2dc3941 100644 --- a/docs/classes/errors.ErrorRPCParse.html +++ b/docs/classes/errors.ErrorRPCParse.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:50
    • @@ -36,12 +36,12 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -80,14 +81,18 @@

          Parameters

        • Optional message: string
        • -
          Optional options: {
              cause: Error;
          }
          +
          Optional options: {
              cause?: T;
              data?: POJO;
              timestamp?: Date;
          }
          • -
            cause: Error
        +
        Optional cause?: T
        +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date

      Returns ErrorRPCParse<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -96,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:52
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -137,23 +142,27 @@
      type: string
      +
    • Defined in src/errors.ts:47
    • -
      description: string = 'Failed to parse Buffer stream'
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:51
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -176,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -223,7 +221,7 @@
      @@ -241,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -268,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCProtocol.html b/docs/classes/errors.ErrorRPCProtocol.html new file mode 100644 index 0000000..39b6cb1 --- /dev/null +++ b/docs/classes/errors.ErrorRPCProtocol.html @@ -0,0 +1,337 @@ +ErrorRPCProtocol | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Class ErrorRPCProtocol<T>Abstract

      +
      +

      Type Parameters

      +
        +
      • +

        T

      +
      +

      Hierarchy

      +
      +
      +
      +
      + +
      +
      +

      Constructors

      +
      + +
        + +
      • +
        +

        Type Parameters

        +
          +
        • +

          T

        +
        +

        Parameters

        +
          +
        • +
          Optional message: string
        • +
        • +
          Optional options: {
              cause?: T;
              data?: POJO;
              timestamp?: Date;
          }
          +
            +
          • +
            Optional cause?: T
          • +
          • +
            Optional data?: POJO
          • +
          • +
            Optional timestamp?: Date
        +

        Returns ErrorRPCProtocol<T>

      +
      +

      Properties

      +
      + +
      cause: T
      +

      Causation of the exception +Can be used to know what caused this exception

      +
      +
      + +
      code: number
      +
      + +
      data: POJO
      +

      Arbitrary data

      +
      +
      + +
      message: string
      +
      + +
      name: string
      +
      + +
      stack?: string
      +
      + +
      timestamp: Date
      +

      Timestamp when exception was constructed in milliseconds +Guaranteed to be weakly monotonic

      +
      +
      + +
      type: string
      +
      + +
      description: string = 'RPC Error'
      +
      + +
      error: string = 'RPC Protocol Error'
      +
      + +
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      +
      +

      Type declaration

      +
      +
      + +
      stackTraceLimit: number
      +
      +

      Accessors

      +
      + +
        +
      • get description(): string
      • +
      • +

        Returns string

      +
      +

      Methods

      +
      + +
        + +
      • +

        Encoding to JSON pojo +When overriding this, you can use super.toJSON +The replacer will:

        +
          +
        • delete undefined values in objects
        • +
        • replace undefined values for null in arrays
        • +
        +
        +

        Returns any

      +
      + +
        + +
      • +

        Create .stack property on a target object

        +
        +
        +

        Parameters

        +
          +
        • +
          targetObject: object
        • +
        • +
          Optional constructorOpt: Function
        +

        Returns void

      +
      + +
        + +
      • +

        Runtime decoding of JSON POJO to exception instance +When overriding this, you cannot use super.fromJSON +You must write it fully, and use the same type-hacks +to support polymorphic this in static methods +https://github.com/microsoft/TypeScript/issues/5863

        +
        +
        +

        Type Parameters

        +
          +
        • +

          T extends Class<any>

        +
        +

        Parameters

        +
          +
        • +
          this: T
        • +
        • +
          json: any
        +

        Returns InstanceType<T>

      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/classes/errors.ErrorRPCRemote.html b/docs/classes/errors.ErrorRPCRemote.html index c8ef330..efba270 100644 --- a/docs/classes/errors.ErrorRPCRemote.html +++ b/docs/classes/errors.ErrorRPCRemote.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:102
    • @@ -50,13 +50,14 @@

      Properties

      timestamp type description +error message prepareStackTrace? stackTraceLimit

      Accessors

      -

      Methods

      @@ -69,7 +70,7 @@

      Constructors

        - +
      • Type Parameters

        @@ -80,15 +81,18 @@

        T

      Parameters

      • -
        Optional metadata: JSONValue
      • -
      • -
        Optional message: string
      • -
      • -
        Optional options: any
      +
      __namedParameters: {
          message?: string;
          metadata?: JSONValue;
          options?: any;
      } = {}
      +
        +
      • +
        Optional message?: string
      • +
      • +
        Optional metadata?: JSONValue
      • +
      • +
        Optional options?: any

      Returns ErrorRPCRemote<T>

      +
    • Defined in src/errors.ts:107
    • Properties

      @@ -97,44 +101,44 @@
      code: number
      +
    • Defined in src/errors.ts:46
    • data: POJO

      Arbitrary data

      message: string
      -
      metadata: JSONValue
      +
    • Defined in src/errors.ts:105
    • name: string
      stack?: string
      @@ -143,28 +147,32 @@
      type: string
      +
    • Defined in src/errors.ts:47
    • -
      description: string = 'Remote error from RPC call'
      -

      Static description of exception

      -
      +
      + +
      error: string = 'RPC Protocol Error'
      +
    • Defined in src/errors.ts:45
    • message: string = 'The server responded with an error'
      +
    • Defined in src/errors.ts:104
    • prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -187,37 +195,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -234,9 +231,9 @@
      +
    • Defined in src/errors.ts:152
      • @@ -252,7 +249,7 @@
        targetObject: object
      • Optional constructorOpt: Function

      Returns void

      @@ -279,9 +276,9 @@
      this: T
      json: any

      Returns InstanceType<T>

      +
    • Defined in src/errors.ts:124
    • diff --git a/docs/classes/errors.ErrorRPCDestroyed.html b/docs/classes/errors.ErrorRPCServer.html similarity index 61% rename from docs/classes/errors.ErrorRPCDestroyed.html rename to docs/classes/errors.ErrorRPCServer.html index f4b2abd..b80a6ea 100644 --- a/docs/classes/errors.ErrorRPCDestroyed.html +++ b/docs/classes/errors.ErrorRPCServer.html @@ -1,4 +1,4 @@ -ErrorRPCDestroyed | @matrixai/rpc
      +ErrorRPCServer | @matrixai/rpc
      +
    • ErrorRPCServer
    • +

      Class ErrorRPCServer<T>

      Type Parameters

        @@ -26,9 +26,9 @@

        Hierarchy

      @@ -36,38 +36,36 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +76,20 @@

          T

      Parameters

      • -
        Optional message: string
      -

      Returns ErrorRPCDestroyed<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -94,12 +101,6 @@
      -
      - -
      code: number
      data: POJO
      @@ -135,20 +136,12 @@
      -
      - -
      type: string
      -
      +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:12
    • prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -182,26 +175,15 @@

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -287,33 +269,28 @@

      @matrixai/rpc +
    • constructor
    • +
    • cause
    • +
    • data
    • +
    • message
    • +
    • name
    • +
    • stack?
    • +
    • timestamp
    • +
    • description
    • +
    • prepareStackTrace?
    • +
    • stackTraceLimit
    • +
    • description
    • +
    • toJSON
    • +
    • captureStackTrace
    • +
    • fromJSON
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/classes/errors.ErrorRPCServerNotRunning.html b/docs/classes/errors.ErrorRPCServerNotRunning.html new file mode 100644 index 0000000..afce42a --- /dev/null +++ b/docs/classes/errors.ErrorRPCServerNotRunning.html @@ -0,0 +1,296 @@ +ErrorRPCServerNotRunning | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Class ErrorRPCServerNotRunning<T>

      +
      +

      Type Parameters

      +
        +
      • +

        T

      +
      +

      Hierarchy

      +
        +
      • ErrorRPC<T> +
          +
        • ErrorRPCServerNotRunning
      +
      +
      +
      + +
      +
      +

      Constructors

      +
      +
      +

      Properties

      +
      +
      +

      Accessors

      +
      +
      +

      Methods

      +
      +
      +

      Constructors

      +
      + +
        + +
      • +
        +

        Type Parameters

        +
          +
        • +

          T

        +
        +

        Parameters

        +
          +
        • +
          Optional message: string
        • +
        • +
          Optional options: {
              cause?: T;
              data?: POJO;
              timestamp?: Date;
          }
          +
            +
          • +
            Optional cause?: T
          • +
          • +
            Optional data?: POJO
          • +
          • +
            Optional timestamp?: Date
        +

        Returns ErrorRPCServerNotRunning<T>

      +
      +

      Properties

      +
      + +
      cause: T
      +

      Causation of the exception +Can be used to know what caused this exception

      +
      +
      + +
      data: POJO
      +

      Arbitrary data

      +
      +
      + +
      message: string
      +
      + +
      name: string
      +
      + +
      stack?: string
      +
      + +
      timestamp: Date
      +

      Timestamp when exception was constructed in milliseconds +Guaranteed to be weakly monotonic

      +
      +
      + +
      description: string = 'RPCServer is not running'
      +
      + +
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      +
      +

      Type declaration

      +
      +
      + +
      stackTraceLimit: number
      +
      +

      Accessors

      +
      + +
        +
      • get description(): string
      • +
      • +

        Returns string

      +
      +

      Methods

      +
      + +
        + +
      • +

        Encoding to JSON pojo +When overriding this, you can use super.toJSON +The replacer will:

        +
          +
        • delete undefined values in objects
        • +
        • replace undefined values for null in arrays
        • +
        +
        +

        Returns any

      +
      + +
        + +
      • +

        Create .stack property on a target object

        +
        +
        +

        Parameters

        +
          +
        • +
          targetObject: object
        • +
        • +
          Optional constructorOpt: Function
        +

        Returns void

      +
      + +
        + +
      • +

        Runtime decoding of JSON POJO to exception instance +When overriding this, you cannot use super.fromJSON +You must write it fully, and use the same type-hacks +to support polymorphic this in static methods +https://github.com/microsoft/TypeScript/issues/5863

        +
        +
        +

        Type Parameters

        +
          +
        • +

          T extends Class<any>

        +
        +

        Parameters

        +
          +
        • +
          this: T
        • +
        • +
          json: any
        +

        Returns InstanceType<T>

      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/classes/errors.ErrorRPCStopping.html b/docs/classes/errors.ErrorRPCStopping.html index 6b78b8f..10d6759 100644 --- a/docs/classes/errors.ErrorRPCStopping.html +++ b/docs/classes/errors.ErrorRPCStopping.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:55
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +79,20 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorRPCStopping<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -91,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:57
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -132,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:56
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -171,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -218,7 +221,7 @@
      @@ -236,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -263,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCStreamEnded.html b/docs/classes/errors.ErrorRPCStreamEnded.html index 3957083..7d8b01c 100644 --- a/docs/classes/errors.ErrorRPCStreamEnded.html +++ b/docs/classes/errors.ErrorRPCStreamEnded.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:162
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -80,14 +81,18 @@

          Parameters

        • Optional message: string
        • -
          Optional options: {
              cause: Error;
          }
          +
          Optional options: {
              cause?: T;
              data?: POJO;
              timestamp?: Date;
          }
          • -
            cause: Error
        +
        Optional cause?: T
        +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date

      Returns ErrorRPCStreamEnded<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -96,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:164
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -137,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:163
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -176,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -223,7 +221,7 @@
      @@ -241,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -268,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorRPCTimedOut.html b/docs/classes/errors.ErrorRPCTimedOut.html index b560dc3..6ad0bc2 100644 --- a/docs/classes/errors.ErrorRPCTimedOut.html +++ b/docs/classes/errors.ErrorRPCTimedOut.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:167
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -80,14 +81,18 @@

          Parameters

        • Optional message: string
        • -
          Optional options: {
              cause: Error;
          }
          +
          Optional options: {
              cause?: T;
              data?: POJO;
              timestamp?: Date;
          }
          • -
            cause: Error
        +
        Optional cause?: T
        +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date

      Returns ErrorRPCTimedOut<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -96,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:169
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -137,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:168
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -176,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -223,7 +221,7 @@
      @@ -241,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -268,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/errors.ErrorUtilsUndefinedBehaviour.html b/docs/classes/errors.ErrorUtilsUndefinedBehaviour.html index 1ccb0ee..5e76b24 100644 --- a/docs/classes/errors.ErrorUtilsUndefinedBehaviour.html +++ b/docs/classes/errors.ErrorUtilsUndefinedBehaviour.html @@ -24,11 +24,11 @@

      T

      Hierarchy

      +
    • Defined in src/errors.ts:172
    • @@ -36,25 +36,26 @@

      Constructors

      -
      +
      -
        - +
          +
        • Type Parameters

          @@ -78,11 +79,20 @@

          T

      Parameters

      • -
        Optional message: string
      +
      Optional message: string
      +
    • +
      Optional options: {
          cause?: T;
          data?: POJO;
          timestamp?: Date;
      }
      +
        +
      • +
        Optional cause?: T
      • +
      • +
        Optional data?: POJO
      • +
      • +
        Optional timestamp?: Date
    • Returns ErrorUtilsUndefinedBehaviour<T>

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:34
    • Properties

      @@ -91,39 +101,39 @@
      -
      +
      -
      code: number
      +
    • Defined in src/errors.ts:174
    • data: POJO

      Arbitrary data

      message: string
      name: string
      stack?: string
      @@ -132,23 +142,27 @@
      type: string
      -
      +
    • Defined in src/errors.ts:47
    • +
      -
      description: string
      -

      Static description of exception

      -
      +
    • Defined in src/errors.ts:173
    • +
      + +
      error: string = 'RPC Protocol Error'
      prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
      @@ -171,37 +185,26 @@
      err: Error
    • stackTraces: CallSite[]
    • Returns any

      stackTraceLimit: number

      Accessors

      -
      +
      -
        +
        • get description(): string
        • Returns string

        • -
        • set description(value: string): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            value: string
          -

          Returns void

      +
    • Defined in node_modules/@matrixai/errors/dist/AbstractError.d.ts:39
    • Methods

      @@ -218,7 +221,7 @@
      @@ -236,7 +239,7 @@
      targetObject: object
    • Optional constructorOpt: Function
    • Returns void

      @@ -263,7 +266,7 @@
      this: T
      json: any

      Returns InstanceType<T>

      diff --git a/docs/classes/events.EventRPC.html b/docs/classes/events.EventRPC.html deleted file mode 100644 index 7220c12..0000000 --- a/docs/classes/events.EventRPC.html +++ /dev/null @@ -1,428 +0,0 @@ -EventRPC | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Class EventRPC<T>Abstract

      -
      -

      Type Parameters

      -
        -
      • -

        T = null

      -
      -

      Hierarchy

      -
        -
      • AbstractEvent<T> -
          -
        • EventRPC
      -
      -
      -
      - -
      -
      -

      Constructors

      -
      - -
        - -
      • -
        -

        Type Parameters

        -
          -
        • -

          T = null

        -
        -

        Parameters

        -
          -
        • -
          Optional type: string
        • -
        • -
          Optional options: CustomEventInit<T>
        • -
        • -
          Optional constructorParams: IArguments
        -

        Returns EventRPC<T>

      • - -
      • -
        -

        Type Parameters

        -
          -
        • -

          T = null

        -
        -

        Parameters

        -
          -
        • -
          options: CustomEventInit<T>
        • -
        • -
          Optional constructorParams: IArguments
        -

        Returns EventRPC<T>

      -
      -

      Properties

      -
      - -
      AT_TARGET: number
      -
      - -
      BUBBLING_PHASE: number
      -
      - -
      CAPTURING_PHASE: number
      -
      - -
      NONE: number
      -
      - -
      bubbles: boolean
      -

      Returns true or false depending on how event was initialized. True if event goes through its target's ancestors in reverse tree order, and false otherwise.

      -
      -
      - -
      cancelBubble: boolean
      -
      -

      Deprecated

      -
      - -
      cancelable: boolean
      -

      Returns true or false depending on how event was initialized. Its return value does not always carry meaning, but true can indicate that part of the operation during which event was dispatched, can be canceled by invoking the preventDefault() method.

      -
      -
      - -
      composed: boolean
      -

      Returns true or false depending on how event was initialized. True if event invokes listeners past a ShadowRoot node that is the root of its target, and false otherwise.

      -
      -
      - -
      constructorParams: IArguments
      -
      - -
      currentTarget: null | EventTarget
      -

      Returns the object whose event listener's callback is currently being invoked.

      -
      -
      - -
      defaultPrevented: boolean
      -

      Returns true if preventDefault() was invoked successfully to indicate cancelation, and false otherwise.

      -
      -
      - -
      detail: T
      -
      - -
      eventPhase: number
      -

      Returns the event's phase, which is one of NONE, CAPTURING_PHASE, AT_TARGET, and BUBBLING_PHASE.

      -
      -
      - -
      isTrusted: boolean
      -

      Returns true if event was dispatched by the user agent, and false otherwise.

      -
      -
      - -
      returnValue: boolean
      -
      -

      Deprecated

      -
      - -
      srcElement: null | EventTarget
      -
      -

      Deprecated

      -
      - -
      target: null | EventTarget
      -

      Returns the object to which event is dispatched (its target).

      -
      -
      - -
      timeStamp: number
      -

      Returns the event's timestamp as the number of milliseconds measured relative to the time origin.

      -
      -
      - -
      type: string
      -

      Returns the type of event, e.g. "click", "hashchange", or "submit".

      -
      -
      - -
      AT_TARGET: number
      -
      - -
      BUBBLING_PHASE: number
      -
      - -
      CAPTURING_PHASE: number
      -
      - -
      NONE: number
      -
      -

      Methods

      -
      - -
        - -
      • -

        Events cannot be re-dispatched. This was probably to prevent infinite -loops. So instead of re-dispatching the same instance, we re-dispatch -a clone of the instance.

        -
        -

        Returns EventRPC<T>

      -
      - -
        - -
      • -

        Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is "closed" that are not reachable from event's currentTarget.

        -
        -

        Returns EventTarget[]

      -
      - -
        - -
      • -
        -

        Deprecated

        -
        -

        Parameters

        -
          -
        • -
          type: string
        • -
        • -
          Optional bubbles: boolean
        • -
        • -
          Optional cancelable: boolean
        -

        Returns void

      -
      - -
        - -
      • -

        If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled.

        -
        -

        Returns void

      -
      - -
        - -
      • -

        Invoking this method prevents event from reaching any registered event listeners after the current one finishes running and, when dispatched in a tree, also prevents event from reaching any other objects.

        -
        -

        Returns void

      -
      - -
        - -
      • -

        When dispatched in a tree, invoking this method prevents event from reaching any objects other than the current object.

        -
        -

        Returns void

      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/classes/events.EventRPCClient.html b/docs/classes/events.EventRPCClient.html index 1c7b308..c3067f7 100644 --- a/docs/classes/events.EventRPCClient.html +++ b/docs/classes/events.EventRPCClient.html @@ -26,16 +26,9 @@

      Hierarchy

      +
    • EventRPCClient
    • @@ -389,12 +382,9 @@

      @matrixai/rpc

      +
    • Defined in src/events.ts:14
    • @@ -384,12 +384,9 @@

      @matrixai/rpc

      +
    • Defined in src/events.ts:26
    • @@ -367,12 +367,9 @@

      @matrixai/rpc

      +
    • EventRPCServerError
    • +
    • EventRPCServerStopping
    • +
    • EventRPCServerStopped
    • +
    • EventRPCServerStart
    • +
    • EventRPCServerStarted
    • @@ -389,12 +388,9 @@

      @matrixai/rpc

      +
    • Defined in src/events.ts:24
    • @@ -367,12 +367,9 @@

      @matrixai/rpc

      +
    • Defined in src/events.ts:16
    • @@ -31,49 +31,49 @@

      Constructors

        - +
      • Parameters

        @@ -81,24 +81,24 @@

        Parameters

      • Optional type: string
      • -
        Optional options: CustomEventInit<Error>
      • +
        Optional options: CustomEventInit<null>
      • Optional constructorParams: IArguments
      -

      Returns EventRPCClientError

      @@ -106,25 +106,25 @@

      Properties

      AT_TARGET: number
      BUBBLING_PHASE: number
      CAPTURING_PHASE: number
      NONE: number
      @@ -132,7 +132,7 @@
      @@ -140,7 +140,7 @@
      @@ -148,7 +148,7 @@
      @@ -156,13 +156,13 @@
      constructorParams: IArguments
      @@ -170,7 +170,7 @@
      @@ -178,13 +178,13 @@
      -
      detail: Error
      @@ -192,7 +192,7 @@
      @@ -200,7 +200,7 @@
      @@ -208,7 +208,7 @@
      @@ -216,7 +216,7 @@
      @@ -224,7 +224,7 @@
      @@ -232,7 +232,7 @@
      @@ -240,31 +240,31 @@
      AT_TARGET: number
      BUBBLING_PHASE: number
      CAPTURING_PHASE: number
      NONE: number
      @@ -272,14 +272,14 @@

      Methods

      @@ -290,7 +290,7 @@
      @@ -310,7 +310,7 @@
      Optional bubbles: Optional cancelable: boolean

      Returns void

      @@ -321,7 +321,7 @@
      @@ -332,7 +332,7 @@
      @@ -343,7 +343,7 @@
      +
    • EventRPCServerStart +
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/classes/events.EventRPCServerCreated.html b/docs/classes/events.EventRPCServerStarted.html similarity index 92% rename from docs/classes/events.EventRPCServerCreated.html rename to docs/classes/events.EventRPCServerStarted.html index 2cacfec..1852d6d 100644 --- a/docs/classes/events.EventRPCServerCreated.html +++ b/docs/classes/events.EventRPCServerStarted.html @@ -1,4 +1,4 @@ -EventRPCServerCreated | @matrixai/rpc
      +EventRPCServerStarted | @matrixai/rpc
      +
    • EventRPCServerStarted
    • +

      Class EventRPCServerStarted

      Hierarchy

      +
    • Defined in src/events.ts:18
    • @@ -31,49 +31,49 @@

      Constructors

        - +
      • Parameters

        @@ -84,11 +84,11 @@
        Optional type: Optional options: CustomEventInit<null>
      • Optional constructorParams: IArguments
      -

      Returns EventRPCServerCreated

      @@ -272,13 +272,13 @@

      Methods

      @@ -367,47 +367,44 @@

      @matrixai/rpc +
    • EventRPCServerStarted +
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/classes/events.EventRPCServerDestroy.html b/docs/classes/events.EventRPCServerStopped.html similarity index 92% rename from docs/classes/events.EventRPCServerDestroy.html rename to docs/classes/events.EventRPCServerStopped.html index 62070a1..17dfcdb 100644 --- a/docs/classes/events.EventRPCServerDestroy.html +++ b/docs/classes/events.EventRPCServerStopped.html @@ -1,4 +1,4 @@ -EventRPCServerDestroy | @matrixai/rpc
      +EventRPCServerStopped | @matrixai/rpc
      +
    • EventRPCServerStopped
    • +

      Class EventRPCServerStopped

      Hierarchy

      +
    • Defined in src/events.ts:22
    • @@ -31,49 +31,49 @@

      Constructors

        - +
      • Parameters

        @@ -84,11 +84,11 @@
        Optional type: Optional options: CustomEventInit<null>
      • Optional constructorParams: IArguments
      -

      Returns EventRPCServerDestroy

      @@ -272,13 +272,13 @@

      Methods

      @@ -367,47 +367,44 @@

      @matrixai/rpc +
    • EventRPCServerStopped +
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/classes/events.EventRPCServerCreate.html b/docs/classes/events.EventRPCServerStopping.html similarity index 71% rename from docs/classes/events.EventRPCServerCreate.html rename to docs/classes/events.EventRPCServerStopping.html index ddc9072..6e2514f 100644 --- a/docs/classes/events.EventRPCServerCreate.html +++ b/docs/classes/events.EventRPCServerStopping.html @@ -1,4 +1,4 @@ -EventRPCServerCreate | @matrixai/rpc
      +EventRPCServerStopping | @matrixai/rpc
      +
    • EventRPCServerStopping
    • +

      Class EventRPCServerStopping

      Hierarchy

      +
    • Defined in src/events.ts:20
    • @@ -31,49 +31,49 @@

      Constructors

        - +
      • Parameters

        @@ -84,11 +84,11 @@
        Optional type: Optional options: CustomEventInit<null>
      • Optional constructorParams: IArguments
      -

      Returns EventRPCServerCreate

      @@ -272,13 +272,13 @@

      Methods

      @@ -367,47 +367,44 @@

      @matrixai/rpc +
    • EventRPCServerStopping +
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/classes/events.RPCErrorEvent.html b/docs/classes/events.RPCErrorEvent.html index 5cc05e2..3bd1f81 100644 --- a/docs/classes/events.RPCErrorEvent.html +++ b/docs/classes/events.RPCErrorEvent.html @@ -23,7 +23,7 @@

      Hierarchy

      • RPCErrorEvent
      +
    • Defined in src/events.ts:33
    • @@ -81,7 +81,7 @@
      options: EventInitReturns RPCErrorEvent
      +
    • Defined in src/events.ts:35
    • Properties

      @@ -160,7 +160,7 @@
      detail: Error
      +
    • Defined in src/events.ts:34
    • eventPhase: number
      @@ -328,12 +328,9 @@

      @matrixai/rpc

      InternalError: -32603
      +
    • Defined in src/errors.ts:26
    • InvalidParams: -32602
      +
    • Defined in src/errors.ts:25
    • InvalidRequest: -32600
      +
    • Defined in src/errors.ts:23
    • MethodNotFound: -32601
      +
    • Defined in src/errors.ts:24
    • MissingCaller: -32016
      +
    • Defined in src/errors.ts:41
    • MissingHeader: -32014
      +
    • Defined in src/errors.ts:39
    • ParseError: -32700
      +
    • Defined in src/errors.ts:22
    • RPCConnectionInternal: -32013
      +
    • Defined in src/errors.ts:38
    • RPCConnectionKeepAliveTimeOut: -32012
      +
    • Defined in src/errors.ts:37
    • RPCConnectionLocal: -32010
      +
    • Defined in src/errors.ts:35
    • RPCConnectionPeer: -32011
      -
      - -
      RPCDestroyed: -32002
      +
    • Defined in src/errors.ts:36
    • RPCMessageLength: -32003
      +
    • Defined in src/errors.ts:29
    • RPCMissingResponse: -32004
      +
    • Defined in src/errors.ts:30
    • RPCOutputStreamError: -32005
      +
    • Defined in src/errors.ts:31
    • RPCRemote: -32006
      +
    • Defined in src/errors.ts:32
    • RPCStopping: -32001
      +
    • Defined in src/errors.ts:28
    • RPCStreamEnded: -32007
      +
    • Defined in src/errors.ts:33
    • RPCTimedOut: -32008
      +
    • Defined in src/errors.ts:34
    • Type Parameters

      +

      T extends JSONRPCMessage<JSONValue>

      Parameters

        @@ -56,7 +56,7 @@
        bufferByteLimit: numberReturns TransformStream<Uint8Array, T>
      +
    • Defined in src/middleware.ts:23
    • +
    • Defined in src/middleware.ts:151
    • +
    • Defined in src/middleware.ts:82
    • +
    • Defined in src/middleware.ts:99
      • - +
      • This function is a factory for a TransformStream that will transform JsonRPCMessages into the Uint8Array form. This is used for the stream output.

        -

        Returns TransformStream<JSONRPCMessage, Uint8Array>

      +
    • Defined in src/middleware.ts:67
      • - +
      • This constructs a transformation stream that converts any input into a JSONRCPRequest message. It also refreshes a timer each time a message is processed if @@ -28,7 +28,7 @@

        Function clientInputTransformStream

        Type Parameters

      +

      I extends JSONValue

      Parameters

        @@ -41,9 +41,9 @@
        method: string
        Optional timer: Timer<void>

        Timer that gets refreshed each time a message is provided.

      -

      Returns TransformStream<I, JSONRPCRequest>

      +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.clientOutputTransformStream.html b/docs/functions/utils.clientOutputTransformStream.html index 3c7735b..c38a414 100644 --- a/docs/functions/utils.clientOutputTransformStream.html +++ b/docs/functions/utils.clientOutputTransformStream.html @@ -18,22 +18,22 @@

      Function clientOutputTransformStream

        - +
      • This constructs a transformation stream that converts any error messages -into errors. It also refreshes a timer each time a message is processed if +into rpcErrors. It also refreshes a timer each time a message is processed if one is provided.

        Type Parameters

        +

        O extends JSONValue

      Parameters

      -

      Returns TransformStream<JSONRPCResponse<O>, O>

      +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.filterSensitive.html b/docs/functions/utils.filterSensitive.html index 09fd547..1513b3f 100644 --- a/docs/functions/utils.filterSensitive.html +++ b/docs/functions/utils.filterSensitive.html @@ -42,7 +42,7 @@
      key: any
      value: any

      Returns any

      +
    • Defined in src/utils.ts:278
    • +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.fromError.html b/docs/functions/utils.fromError.html index da18cc1..b405994 100644 --- a/docs/functions/utils.fromError.html +++ b/docs/functions/utils.fromError.html @@ -18,7 +18,7 @@

      Function fromError

      +
    • Defined in src/utils.ts:243
    • +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.getHandlerTypes.html b/docs/functions/utils.getHandlerTypes.html index 2d57115..f25408a 100644 --- a/docs/functions/utils.getHandlerTypes.html +++ b/docs/functions/utils.getHandlerTypes.html @@ -18,16 +18,16 @@

      Function getHandlerTypes

      +

      Returns Record<string, HandlerType>

      +
    • Defined in src/utils.ts:440
    • +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.isObject.html b/docs/functions/utils.isObject.html index 417a5ef..6758a56 100644 --- a/docs/functions/utils.isObject.html +++ b/docs/functions/utils.isObject.html @@ -27,7 +27,7 @@

      Parameters

      o: unknown

      Returns o is object

      +
    • Defined in src/utils.ts:43
    • +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.toError.html b/docs/functions/utils.never.html similarity index 76% rename from docs/functions/utils.toError.html rename to docs/functions/utils.never.html index 39ed4d2..4aa9333 100644 --- a/docs/functions/utils.toError.html +++ b/docs/functions/utils.never.html @@ -1,4 +1,4 @@ -toError | @matrixai/rpc
      +never | @matrixai/rpc
      +
    • never
    • +

      Function never

        - +
      • -

        Deserializes an error response object into an ErrorRPCRemote instance.

        - -

        Returns

        The deserialized ErrorRPCRemote instance.

        - -

        Throws

        If the errorResponse object is invalid.

        -
        -
        -

        Parameters

        -
          -
        • -
          errorResponse: any
          -

          The error response object.

          -
        • -
        • -
          Optional metadata: any
          -

          Optional metadata for the deserialized error.

          -
        -

        Returns ErrorRPCRemote<any>

      +
    • Defined in src/utils.ts:518
    • +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.parseHeadStream.html b/docs/functions/utils.parseHeadStream.html index 9b5266f..d2b2b36 100644 --- a/docs/functions/utils.parseHeadStream.html +++ b/docs/functions/utils.parseHeadStream.html @@ -29,7 +29,7 @@

      Function parseHeadStream

      Type Parameters

      +

      T extends JSONRPCMessage<JSONValue>

      Parameters

        @@ -56,7 +56,7 @@
        bufferByteLimit: numberReturns TransformStream<Uint8Array, T | Uint8Array>
      +
    • Defined in src/utils.ts:460
    • +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.parseJSONRPCMessage.html b/docs/functions/utils.parseJSONRPCMessage.html index d1bf9da..82e1dfa 100644 --- a/docs/functions/utils.parseJSONRPCMessage.html +++ b/docs/functions/utils.parseJSONRPCMessage.html @@ -18,21 +18,21 @@

      Function parseJSONRPCMessage

      Parameters

      • message: unknown
      -

      Returns JSONRPCMessage<T>

      +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.parseJSONRPCRequest.html b/docs/functions/utils.parseJSONRPCRequest.html index 7b3a33c..7993e53 100644 --- a/docs/functions/utils.parseJSONRPCRequest.html +++ b/docs/functions/utils.parseJSONRPCRequest.html @@ -18,21 +18,21 @@

      Function parseJSONRPCRequest

      Parameters

      • message: unknown
      -

      Returns JSONRPCRequest<T>

      +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.parseJSONRPCRequestMessage.html b/docs/functions/utils.parseJSONRPCRequestMessage.html index e220e4a..3018abe 100644 --- a/docs/functions/utils.parseJSONRPCRequestMessage.html +++ b/docs/functions/utils.parseJSONRPCRequestMessage.html @@ -18,21 +18,21 @@

      Function parseJSONRPCRequestMessage

      Parameters

      • message: unknown
      -

      Returns JSONRPCRequestMessage<T>

      +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.parseJSONRPCRequestNotification.html b/docs/functions/utils.parseJSONRPCRequestNotification.html index 89846b5..97aee1f 100644 --- a/docs/functions/utils.parseJSONRPCRequestNotification.html +++ b/docs/functions/utils.parseJSONRPCRequestNotification.html @@ -18,21 +18,21 @@

      Function parseJSONRPCRequestNotification

      Parameters

      • message: unknown
      -

      Returns JSONRPCRequestNotification<T>

      +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.parseJSONRPCResponse.html b/docs/functions/utils.parseJSONRPCResponse.html index d5dc609..4719350 100644 --- a/docs/functions/utils.parseJSONRPCResponse.html +++ b/docs/functions/utils.parseJSONRPCResponse.html @@ -18,21 +18,21 @@

      Function parseJSONRPCResponse

      Parameters

      • message: unknown
      -

      Returns JSONRPCResponse<T>

      +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.parseJSONRPCResponseError.html b/docs/functions/utils.parseJSONRPCResponseError.html index 4924578..3f0caca 100644 --- a/docs/functions/utils.parseJSONRPCResponseError.html +++ b/docs/functions/utils.parseJSONRPCResponseError.html @@ -18,16 +18,16 @@

      Function parseJSONRPCResponseError

      +
    • Defined in src/utils.ts:140
    • +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.parseJSONRPCResponseResult.html b/docs/functions/utils.parseJSONRPCResponseResult.html index 5f669a7..a0ea0bd 100644 --- a/docs/functions/utils.parseJSONRPCResponseResult.html +++ b/docs/functions/utils.parseJSONRPCResponseResult.html @@ -18,21 +18,21 @@

      Function parseJSONRPCResponseResult

      Parameters

      • message: unknown
      -

      Returns JSONRPCResponseResult<T>

      +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.promise.html b/docs/functions/utils.promise.html index 91e9296..284759f 100644 --- a/docs/functions/utils.promise.html +++ b/docs/functions/utils.promise.html @@ -18,16 +18,16 @@

      Function promise

      +
    • Defined in src/utils.ts:46
    • +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/functions/utils.sleep.html b/docs/functions/utils.sleep.html index 1739557..383c47b 100644 --- a/docs/functions/utils.sleep.html +++ b/docs/functions/utils.sleep.html @@ -27,7 +27,7 @@

      Parameters

      ms: number

      Returns Promise<void>

      +
    • Defined in src/utils.ts:59
    • +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 5229ab5..e4a9b70 100644 --- a/docs/index.html +++ b/docs/index.html @@ -28,13 +28,162 @@

      Installation

      Usage

      -

      Because decorators are experimental, you must enable: "experimentalDecorators": true in your tsconfig.json to use this library.

      + + +

      Overview of different streams

      +
      + + +

      Duplex Stream ->

      +
      + + +
      Client:
      +
      +

      The client initiates a duplex streaming RPC call using a method that returns both a readable and a writable stream. The client can read from the readable stream and write to the writable stream.

      +
      import { JSONValue } from "./types";
      import Caller from './Caller';

      // Initialize the duplex call
      const { ReadableStream, WritableStream } = client.method();

      // Get the reader and writer from the streams
      const reader = ReadableStream.getReader();
      const writer = WritableStream.getWriter();

      // Read output from the server
      const readResult = await reader.read();
      if (!readResult.done) {
      const output: JSONValue = readResult.value;
      console.log("Received from server:", output);
      }

      // Write data to the server
      const inputData: JSONValue = { someKey: "someValue" };
      await writer.write(inputData);

      // Don't forget to close the writer when you're done
      await writer.close();
      +
      + + +
      Server :
      +
      +
      import type { ContainerType, JSONValue } from '../types';
      import type { ContextTimed } from '@matrixai/contexts';
      import Handler from './Handler';

      // Define the handler as an async generator function
      const handle = async function* (
      input: AsyncIterableIterator<JSONValue>, // This is a generator.
      cancel: (reason?: any) => void,
      meta: Record<string, JSONValue> | undefined,
      ctx: ContextTimed
      ): AsyncIterableIterator<JSONValue> {

      // Loop through the incoming stream of messages
      for await (const incomingData of input) {
      console.log("Received from client:", incomingData);

      // Perform some operation on the incoming data
      const outputData: JSONValue = { responseKey: "responseValue" };

      // Yield data back to the client
      yield outputData;
      // We yield since stream can contain multiple messages.
      }
      };
      +
      + + +

      Client Streaming

      +
      + + +
      Client
      +
      +

      The client initiates a client streaming RPC call using a method that returns a writable stream and a promise. The client writes to the writable stream and awaits the output promise to get the response.

      +
      { output: Promise<JSONValue>, WriteableStream<JSONValue>} = client.method();
      const writer = WritableStream.getWriter();
      writer.write();
      const Output = await output; +
      + + +
      Server
      +
      +

      On the server side, the handle function is defined as an asynchronous generator function. It takes an AsyncIterableIterator as input, which represents the stream of incoming messages from the client. It yields output back to the client as needed.

      +
      // Initialize the client streaming call
      const { output, writable } = client.method();
      const writer = writable.getWriter();

      // Write multiple messages to the server
      const inputData1: JSONValue = { key1: "value1" };
      const inputData2: JSONValue = { key2: "value2" };
      await writer.write(inputData1);
      await writer.write(inputData2);

      // Close the writer when done
      await writer.close();

      // Wait for the server's response
      const serverOutput: JSONValue = await output;
      console.log("Received from server:", serverOutput); +
      + + +
      Server
      +
      +

      On the server side, the handle function is an asynchronous function that takes an AsyncIterableIterator as input, representing the stream of incoming messages from the client. It returns a promise that resolves to the output that will be sent back to the client.

      +
      import { JSONValue } from "./types";
      import type { ContextTimed } from '@matrixai/contexts';

      const handle = async (
      input: AsyncIterableIterator<JSONValue>,
      cancel: (reason?: any) => void,
      meta: Record<string, JSONValue> | undefined,
      ctx: ContextTimed
      ): Promise<JSONValue> {

      // Aggregate or process the incoming messages from the client
      let aggregateData: any = {}; // Replace 'any' with your specific type
      for await (const incomingData of input) {
      // Perform some aggregation or processing on incomingData
      }

      // Generate the response to be sent back to the client
      const outputData: JSONValue = { responseKey: "responseValue" };

      return outputData;
      }; +
      + + +

      Server Streaming

      +
      + + +
      Client
      +
      +

      The client initiates a server streaming RPC call using a method that takes input parameters and returns a readable stream. The client writes a single message and then reads multiple messages from the readable stream.

      +
      // Initialize the server streaming call
      const readableStream: ReadableStream<JSONValue> = client.method();

      const reader = readableStream.getReader();

      // Read multiple messages from the server
      while (true) {
      const { value, done } = await reader.read();
      if (done) break;

      console.log("Received from server:", value);
      } +
      + + +
      Server
      +
      +

      On the server side, the handle function is an asynchronous generator function that takes a single input parameter from the client. It yields multiple messages that will be sent back to the client through the readable stream.

      +
      import { JSONValue } from "./types";
      import type { ContextTimed } from '@matrixai/contexts';

      public handle = async function* (
      input: JSONValue,
      cancel: (reason?: any) => void,
      meta: Record<string, JSONValue> | undefined,
      ctx: ContextTimed
      ): AsyncIterableIterator<JSONValue> {

      // Process the input and prepare the data to be sent back to the client
      const outputData1: JSONValue = { responseKey1: "responseValue1" };
      const outputData2: JSONValue = { responseKey2: "responseValue2" };

      // Yield multiple messages to be sent to the client
      yield outputData1;
      }; +
      + + +

      Unary Streaming

      +
      +

      In a unary RPC, the client sends a single request to the server and receives a single response back, much like a regular function call.

      + + +
      Client
      +
      +

      The client initiates a unary RPC call by invoking a method that returns a promise. It passes the required input parameters as arguments to the method. The client then waits for the promise to resolve, receiving the output.

      +
      import type { JSONValue } from '../types';
      import Caller from './Caller';

      // Initialize the unary RPC call with input parameters
      const promise: Promise<JSONValue> = client.unaryCaller("methodName", { someParam: "someValue" });

      // Wait for the response
      const output: JSONValue = await promise;
      console.log("Received from server:", output);
      +
      + + +
      Server
      +
      +
      import { JSONValue } from "./types";
      import { ContextTimed } from "./contexts"; // Assuming ContextTimed is imported from a module named 'contexts'

      public handle = async (
      input: JSONValue,
      cancel: (reason?: any) => void,
      meta: Record<string, JSONValue> | undefined,
      ctx: ContextTimed,
      ): Promise<JSONValue> {

      // Process the input and prepare the data to be sent back to the client
      const outputData: JSONValue = { responseKey: "responseValue" };

      return outputData;
      }; +
      + + +

      Usage Examples

      +
      +

      Because decorators are experimental, you must enable: +"experimentalDecorators": true in your tsconfig.json to use this library.

      + + +

      Client Stream

      +
      +

      In a Client Stream, the client can write multiple messages to a single stream, +while the server reads from that stream and then returns a single response. +This pattern is useful when the client needs to send a sequence of data to the server, +after which the server processes the data and replies with a single result. +This pattern is good for scenarios like file uploads.

      +

      This example shows how to create an RPC pair and handle streaming integers and summing them up.

      +
      import {
      ContainerType,
      JSONValue,
      IdGen,
      StreamFactory,
      MiddlewareFactory, ClientManifest,
      } from "@matrixai/rpc/dist/types";
      import WebSocket = require('ws');
      import {ClientHandler} from "@matrixai/rpc/dist/handlers";
      import type { ContextTimed } from '@matrixai/contexts';
      import RPCServer from '@matrixai/rpc/dist/RPCServer'
      import RPCClient from '@matrixai/rpc/dist/RPCClient'
      import Logger, { LogLevel, StreamHandler } from '@matrixai/logger';
      import { createDestroy } from '@matrixai/async-init';
      import {ClientCaller} from "@matrixai/rpc/dist/callers";
      import {ReadableStream, WritableStream} from "stream/web";
      import {ReadableStreamDefaultController} from "stream/web";

      const logger = new Logger(`RPC Test`, LogLevel.WARN, [new StreamHandler()]);

      let streamFactory: StreamFactory;
      let middlewareFactory: MiddlewareFactory<any, any, any, any>;
      let idGen: IdGen;

      class Sum extends ClientHandler<ContainerType, number, number> {
      public handle = async (
      input: AsyncIterable<number>,
      ): Promise<number> => {
      let sum = 0;
      console.log("Entering handle method on server.");
      for await (const num of input) {
      console.log(`Received number: ${num}`);
      sum += num;
      }
      console.log(`Returning sum: ${sum}`);
      return sum;
      };

      }

      // Server-side WebSocket setup
      async function startServer() {
      const wss = new WebSocket.Server({ port: 8080 });
      const rpcServer = new RPCServer({
      logger: new Logger('rpc-server'),
      handlerTimeoutTime: 60000,
      idGen,
      });
      await rpcServer.start({
      manifest: {
      Sum: new Sum({}),
      },
      });

      wss.on('connection', (ws) => {
      const { readable, writable } = wsToStream(ws);
      rpcServer.handleStream({ readable, writable, cancel: () => {} });
      });
      return { rpcServer };
      }
      type Manifest = {
      Sum: ClientCaller<number, number>;
      };
      // Client-side WebSocket setup
      async function startClient() {
      return new Promise<RPCClient<Manifest>>( (resolve, reject) => {
      const ws = new WebSocket('ws://localhost:8080');

      ws.addEventListener('open', async () => {
      const { readable, writable } = wsToStream(ws);
      const rpcClient = new RPCClient({
      manifest: {
      Sum: new ClientCaller<number, number>(),
      },
      streamFactory: async () => ({ readable, writable, cancel: () => {} }),
      middlewareFactory,
      logger,
      idGen,
      });
      resolve(rpcClient);
      });

      ws.addEventListener('error', (err) => {
      reject(err);
      });
      });
      }

      function wsToStream(ws: WebSocket): { readable: ReadableStream, writable: WritableStream } {
      let readableController: ReadableStreamDefaultController<any> | null = null;

      const readable = new ReadableStream({
      start(controller) {
      readableController = controller;
      },
      cancel() {
      ws.close();
      },
      });

      ws.on('message', (chunk: any) => {
      readableController?.enqueue(chunk);
      });

      ws.on('close', () => {
      readableController?.close();
      });

      const writable = new WritableStream({
      write(chunk) {
      ws.send(chunk);
      },
      close() {
      ws.close();
      },
      abort() {
      ws.close();
      },
      });

      return { readable, writable };
      }
      // Function to execute the Sum RPC call
      // Function to execute the Sum RPC call
      async function executeSum(rpcClient: RPCClient<Manifest>) {
      try {
      const { output, writable } = await rpcClient.methods.Sum();
      const writer = writable.getWriter();
      await writer.write(5);
      await writer.write(10);
      await writer.close();

      const ans = await output;
      console.log(`Received output: ${ans}`);
      console.log(`Sum is: ${ans}`);
      } catch (error) {
      console.error("Error in executeSum:", error);
      }
      }

      // Main function to tie everything together
      async function main() {
      try {
      const serverObject = await startServer();
      const rpcClient = await startClient();

      await executeSum(rpcClient);
      await serverObject.rpcServer.destroy();
      } catch (err) {
      console.error("An error occurred:", err);
      }
      }

      main(); +
      +

      img.png

      + + +

      Raw Stream

      +
      +

      Raw Stream is designed for low-level handling of RPC calls, enabling granular control over data streaming. +Unlike other patterns, Raw Streams allow both the server and client to work directly with raw data, +providing a more flexible yet complex way to handle communications. +This is especially useful when the RPC protocol itself needs customization +or when handling different types of data streams within the same connection.

      +

      In this example, the client sends a sequence of numbers and the server responds with the factorial of each number.

      +
      import {
      ContainerType,
      JSONValue,
      IdGen,
      StreamFactory,
      MiddlewareFactory, ClientManifest, JSONRPCRequest,
      } from "@matrixai/rpc/dist/types";
      import WebSocket = require('ws');
      import { RawHandler} from "@matrixai/rpc/dist/handlers";
      import type { ContextTimed } from '@matrixai/contexts';
      import RPCServer from '@matrixai/rpc/dist/RPCServer'
      import RPCClient from '@matrixai/rpc/dist/RPCClient'
      import Logger, { LogLevel, StreamHandler } from '@matrixai/logger';
      import { createDestroy } from '@matrixai/async-init';
      import {RawCaller} from "@matrixai/rpc/dist/callers";
      import {ReadableStream, WritableStream} from "stream/web";
      import {ReadableStreamDefaultController} from "stream/web";



      const logger = new Logger('RPC Test', LogLevel.WARN, [new StreamHandler()]);
      let streamFactory: StreamFactory;
      let middlewareFactory: MiddlewareFactory<any, any, any, any>;
      let idGen: IdGen;

      type Manifest = {
      FactorialStream: RawCaller;
      };

      class FactorialStream extends RawHandler<ContainerType> {
      public handle = async (
      [request, inputStream]: [JSONRPCRequest, ReadableStream<Uint8Array>],
      cancel: (reason?: any) => void,
      meta: Record<string, JSONValue> | undefined,
      ctx: ContextTimed
      ): Promise<[JSONValue, ReadableStream<Uint8Array>]> => {
      const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>();
      (async () => {
      const reader = inputStream.getReader();
      const writer = writable.getWriter();
      while (true) {
      const { done, value } = await reader.read();
      if (done) {
      break;
      }

      const num = parseInt(new TextDecoder().decode(value), 10);
      const factorial = factorialOf(num).toString();
      const outputBuffer = new TextEncoder().encode(factorial);

      writer.write(outputBuffer);
      }
      writer.close();
      })();

      return ['Starting factorial computation', readable as ReadableStream<Uint8Array>];
      }
      }

      function factorialOf(n: number): number {
      return n === 0 ? 1 : n * factorialOf(n - 1);
      }

      async function startServer() {
      const wss = new WebSocket.Server({ port: 1221 });
      const rpcServer = new RPCServer({
      handlerTimeoutTime: 200,
      logger,
      idGen,
      });
      await rpcServer.start({
      manifest: {
      FactorialStream: new FactorialStream({}),
      },
      });

      wss.on('connection', (ws) => {
      const { readable, writable } = wsToStream(ws);
      rpcServer.handleStream({ readable, writable, cancel: () => {} });
      });
      return { rpcServer };
      }

      async function startClient() {
      return new Promise<RPCClient<Manifest>>((resolve, reject) => {
      const ws = new WebSocket('ws://localhost:1221');

      ws.addEventListener('open', async () => {
      const { readable, writable } = wsToStream(ws);
      const rpcClient = new RPCClient({
      manifest: {
      FactorialStream: new RawCaller(),
      },
      streamFactory: async () => ({ readable, writable, cancel: () => {} }),
      middlewareFactory,
      logger,
      idGen,
      });
      resolve(rpcClient);
      });

      ws.addEventListener('error', (err) => {
      reject(err);
      });
      });
      }

      function wsToStream(ws: WebSocket): { readable: ReadableStream, writable: WritableStream } {
      let readableController: ReadableStreamDefaultController<any> | null = null;

      const readable = new ReadableStream({
      start(controller) {
      readableController = controller;
      },
      cancel() {
      ws.close();
      },
      });

      ws.on('message', (chunk: any) => {
      readableController?.enqueue(chunk);
      });

      ws.on('close', () => {
      readableController?.close();
      });

      const writable = new WritableStream({
      write(chunk) {
      ws.send(chunk);
      },
      close() {
      ws.close();
      },
      abort() {
      ws.close();
      },
      });

      return { readable, writable };
      }

      async function execute(rpcClient: RPCClient<Manifest>){
      try{
      // Initialize the FactorialStream RPC method
      const { readable, writable, meta } = await rpcClient.methods.FactorialStream({timer: 200});

      console.log('Meta:', meta); // Output meta information, should be 'Starting factorial computation'

      // Create a writer for the writable stream
      const writer = writable.getWriter();

      // Send numbers 4, 5, 6, 8 to the server for factorial computation
      for (const num of [4, 5, 6, 8]) {
      const buffer = new TextEncoder().encode(num.toString());
      await writer.write(buffer);
      }
      await writer.close();

      // Create a reader for the readable stream
      const reader = readable.getReader();

      // Read the computed factorials from the server
      while (true) {
      const { done, value } = await reader.read();
      if (done) {
      console.log('Done reading from stream.');
      process.exit(0);
      break;
      }
      const factorialResult = new TextDecoder().decode(value).trim(); // Added trim() to remove any extra whitespace
      console.log(`The factorial is: ${factorialResult}`);

      }
      }catch (error){
      console.error("Error is :", error);

      }
      }

      async function main() {
      try {
      const serverObject = await startServer();
      const rpcClient = await startClient();

      await execute(rpcClient);
      await serverObject.rpcServer.destroy();
      } catch (err) {
      console.error("An error occurred:", err);
      }
      }

      main(); +
      +

      img.png

      + + +

      Server Stream

      +
      +

      In Server Stream calls, +the client sends a single request and receives multiple responses in a read-only stream from the server. +The server can keep pushing messages as long as it needs, allowing real-time updates from the server to the client. +This is useful for things like monitoring, +where the server needs to update the client in real-time based on events or data changes. +In this example, the client sends a number and the server responds with the squares of all numbers up to that number.

      +
      import Logger, {LogLevel, StreamHandler} from "@matrixai/logger";
      import {ContainerType, IdGen, JSONValue, MiddlewareFactory, StreamFactory} from "@matrixai/rpc/dist/types";
      import {RawCaller, ServerCaller} from "@matrixai/rpc/dist/callers";
      import {ServerHandler} from "@matrixai/rpc/dist/handlers";
      import {ContextTimed} from "@matrixai/contexts";
      import RPCServer from "@matrixai/rpc/dist/RPCServer";
      import WebSocket = require('ws');
      import {ReadableStream, ReadableStreamDefaultController, WritableStream} from "stream/web";
      import RPCClient from "@matrixai/rpc/dist/RPCClient";

      const logger = new Logger('Server Test', LogLevel.WARN, [new StreamHandler()]);
      let streamFactory: StreamFactory;
      let middlewareFactory: MiddlewareFactory<any, any, any, any>;
      let idGen: IdGen;




      class SquaredNumbers extends ServerHandler<ContainerType, number, number>{
      public handle = async function* (
      input: number,
      ):AsyncGenerator<number>{
      for (let i = 0; i<= input; i++){
      yield i*i;
      }
      };
      }
      type Manifest = {
      SquaredNumbers: ServerCaller<number,number>;
      }
      async function startServer() {
      const wss = new WebSocket.Server({ port: 1221 });
      const rpcServer = new RPCServer({
      logger,
      idGen,
      });
      await rpcServer.start({
      manifest: {
      SquaredNumbers: new SquaredNumbers({}),
      },
      });

      wss.on('connection', (ws) => {
      const { readable, writable } =
      wsToStream(ws);
      rpcServer.handleStream({ readable, writable, cancel: () => {} });
      });
      return { rpcServer };
      }

      async function startClient() {
      return new Promise<RPCClient<Manifest>>((resolve, reject) => {
      const ws = new WebSocket('ws://localhost:1221');

      ws.addEventListener('open', async () => {
      const { readable, writable } =
      wsToStream(ws);
      const rpcClient =
      new RPCClient<Manifest>({
      manifest: {
      SquaredNumbers: new ServerCaller<number, number>(),
      },
      streamFactory: async () => ({ readable, writable,
      cancel: () => {} }),
      middlewareFactory,
      logger,
      idGen,
      });
      resolve(rpcClient);
      });

      ws.addEventListener('error', (err) => {
      reject(err);
      });
      });
      }

      function wsToStream(ws: WebSocket): { readable: ReadableStream, writable: WritableStream } {
      let readableController: ReadableStreamDefaultController<any> | null = null;

      const readable = new ReadableStream({
      start(controller) {
      readableController = controller;
      },
      cancel() {
      ws.close();
      },
      });

      ws.on('message', (chunk: any) => {
      readableController?.enqueue(chunk);
      });

      ws.on('close', () => {
      readableController?.close();
      });

      const writable = new WritableStream({
      write(chunk) {
      ws.send(chunk);
      },
      close() {
      ws.close();
      },
      abort() {
      ws.close();
      },
      });

      return { readable, writable };
      }


      async function execute(rpcClient: RPCClient<Manifest>) {
      try {
      const squaredStream = await rpcClient.methods.SquaredNumbers(235);
      const outputs: Array<number> = [];
      for await(const num of squaredStream) {
      outputs.push(num);
      }
      console.log(`Squared numbers are: ${outputs.join(', ')}`);
      } catch (error) {
      console.error("Error in execute:", error);
      }
      }


      async function main() {
      try {
      const serverObject = await startServer();
      const rpcClient = await startClient();

      await execute(rpcClient);

      await serverObject.rpcServer.destroy();
      } catch (err) {
      console.log('An Error occurred: ', err)
      }
      }


      main(); +
      + + +

      Duplex Stream

      +
      +

      A Duplex Stream enables both the client and the server to read +and write messages in their respective streams independently of each other. +Both parties can read and write multiple messages in any order. +It's useful in scenarios that require ongoing communication in both directions, like chat applications.

      +

      In this example, the client sends a sequence of numbers and the server responds with the squares of those numbers.

      +
      import Logger, {LogLevel, StreamHandler} from "@matrixai/logger";
      import {ContainerType, IdGen, JSONValue, MiddlewareFactory, StreamFactory} from "@matrixai/rpc/dist/types";
      import {defaultMiddleware} from "@matrixai/rpc/dist/middleware";
      import {ClientCaller, DuplexCaller} from "@matrixai/rpc/dist/callers";
      import {DuplexHandler} from "@matrixai/rpc/dist/handlers";
      import {ContextTimed} from "@matrixai/contexts";
      import RPCServer from "@matrixai/rpc/dist/RPCServer";
      import WebSocket = require('ws');
      import {takeUntil} from "ix/Ix.dom.asynciterable.operators";
      import RPCClient from "@matrixai/rpc/dist/RPCClient";
      import {ReadableStream, ReadableStreamDefaultController, WritableStream} from "stream/web";


      const logger = new Logger('Duplex Test', LogLevel.WARN, [new StreamHandler()]);

      let streamFactory: StreamFactory;
      let middlewareFactory: MiddlewareFactory<any, any, any, any>;
      let idGen: IdGen;

      class SquaredDuplex extends DuplexHandler<ContainerType, number, Array<number>>{
      public handle = async function*(
      input: AsyncIterableIterator<number>,
      cancel: (reason?: any) => void,
      meta: Record<string, JSONValue> | undefined,
      ctx: ContextTimed,
      ): AsyncIterableIterator<Array<number>>{
      for await (const num of input){
      const squares: Array<number> = []
      for(let i =1; i<=num; i++){
      squares.push(i*i);
      }
      yield squares;
      }
      };
      }

      type Manifest = {
      SquaredDuplex: DuplexCaller<number, Array<number>>;
      };

      async function startServer() {
      const wss = new WebSocket.Server({ port: 8080 });
      const rpcServer = new RPCServer({
      logger: new Logger('rpc-server'),
      handlerTimeoutTime: 1000,
      idGen,
      });
      rpcServer.start({
      manifest: {
      SquaredDuplex: new SquaredDuplex({}),
      },
      });

      wss.on('connection', (ws) => {
      const { readable, writable } = wsToStream(ws);
      rpcServer.handleStream({ readable, writable, cancel: () => {} });
      });
      return { rpcServer };
      }

      async function startClient() {
      return new Promise<RPCClient<Manifest>>( (resolve, reject) => {
      const ws = new WebSocket('ws://localhost:8080');

      ws.addEventListener('open', async () => {
      const { readable, writable } = wsToStream(ws);
      const rpcClient = new RPCClient({
      manifest: {
      SquaredDuplex: new DuplexCaller<number, Array<number>>(),
      },
      streamFactory: async () => ({ readable, writable, cancel: () => {} }),
      middlewareFactory,
      logger,
      idGen,
      });
      resolve(rpcClient);
      });

      ws.addEventListener('error', (err) => {
      reject(err);
      });
      });
      }
      function wsToStream(ws: WebSocket): { readable: ReadableStream, writable: WritableStream } {
      let readableController: ReadableStreamDefaultController<any> | null = null;

      const readable = new ReadableStream({
      start(controller) {
      readableController = controller;
      },
      cancel() {
      ws.close();
      },
      });

      ws.on('message', (chunk: any) => {
      readableController?.enqueue(chunk);
      });

      ws.on('close', () => {
      readableController?.close();
      });

      const writable = new WritableStream({
      write(chunk) {
      ws.send(chunk);
      },
      close() {
      ws.close();
      },
      abort() {
      ws.close();
      },
      });

      return { readable, writable };
      }

      // Client-side duplex caller
      async function executeSquareNumbersDuplex(rpcClient: RPCClient<Manifest>) {

      try{const { readable, writable } = await rpcClient.methods.SquaredDuplex();
      const writer = writable.getWriter();
      await writer.write(2);
      await writer.write(3);
      await writer.write(4);

      // Read squared numbers from the server
      for await (const squares of readable) {
      console.log(`Squares up to n are: ${squares.join(", ")}`);
      }
      await writer.close();

      }catch (e){
      console.log(e)
      }
      }

      // Main function to tie everything together
      async function main() {
      try {
      const serverObject = await startServer();
      const rpcClient = await startClient();

      await executeSquareNumbersDuplex(rpcClient); // Add this line to run the duplex caller
      await serverObject.rpcServer.destroy();
      } catch (err) {
      console.error("An error occurred:", err);
      }
      }

      main();
      +
      +

      img.png

      + + +

      Unary Stream

      +
      +

      In a Unary Stream, the client sends a single request to the server and gets a single response back, +just like HTTP/REST calls but over a connection. +It's the simplest form of RPC, suitable for short-lived operations that don't require streaming data. +It's the go-to choice for straightforward "request and response" interactions.

      +

      In this example, the client sends a number and the server responds with the square of that number.

      +
      import {
      ContainerType,
      JSONValue,
      IdGen,
      StreamFactory,
      MiddlewareFactory, ClientManifest,
      } from "@matrixai/rpc/dist/types";
      import WebSocket = require('ws');
      import {ClientHandler, UnaryHandler} from "@matrixai/rpc/dist/handlers";
      import type { ContextTimed } from '@matrixai/contexts';
      import RPCServer from '@matrixai/rpc/dist/RPCServer'
      import RPCClient from '@matrixai/rpc/dist/RPCClient'
      import Logger, { LogLevel, StreamHandler } from '@matrixai/logger';
      import { createDestroy } from '@matrixai/async-init';
      import {ClientCaller, UnaryCaller} from "@matrixai/rpc/dist/callers";
      import {ReadableStream, WritableStream} from "stream/web";
      import {ReadableStreamDefaultController} from "stream/web";

      const logger = new Logger(`RPC Test`, LogLevel.WARN, [new StreamHandler()]);

      let streamFactory: StreamFactory;
      let middlewareFactory: MiddlewareFactory<any, any, any, any>;
      let idGen: IdGen;

      class SquaredNumberUnary extends UnaryHandler<ContainerType, number, number> {
      public handle = async (
      input: number,
      cancel: (reason?: any) => void,
      meta: Record<string, JSONValue> | undefined,
      ctx: ContextTimed,
      ): Promise<number> => {
      return input * input;
      };
      }

      // Server-side WebSocket setup
      async function startServer() {
      const wss = new WebSocket.Server({ port: 8080 });
      const rpcServer = new RPCServer({
      logger: new Logger('rpc-server'),
      handlerTimeoutTime: 1000,
      idGen,
      });
      await rpcServer.start({
      manifest: {
      SquaredNumberUnary: new SquaredNumberUnary({}),
      },
      });

      wss.on('connection', (ws) => {
      const { readable, writable } = wsToStream(ws);
      rpcServer.handleStream({ readable, writable, cancel: () => {} });
      });
      return { rpcServer };
      }
      type Manifest = {
      SquaredNumberUnary: UnaryCaller<number, number>;
      };
      // Client-side WebSocket setup
      async function startClient() {
      return new Promise<RPCClient<Manifest>>( (resolve, reject) => {
      const ws = new WebSocket('ws://localhost:8080');

      ws.addEventListener('open', async () => {
      const { readable, writable } = wsToStream(ws);
      const rpcClient = new RPCClient({
      manifest: {
      SquaredNumberUnary: new UnaryCaller<number, number>(),
      },
      streamFactory: async () => ({ readable, writable, cancel: () => {} }),
      middlewareFactory,
      logger,
      idGen,
      });
      resolve(rpcClient);
      });

      ws.addEventListener('error', (err) => {
      reject(err);
      });
      });
      }

      function wsToStream(ws: WebSocket): { readable: ReadableStream, writable: WritableStream } {
      let readableController: ReadableStreamDefaultController<any> | null = null;

      const readable = new ReadableStream({
      start(controller) {
      readableController = controller;
      },
      cancel() {
      ws.close();
      },
      });

      ws.on('message', (chunk: any) => {
      readableController?.enqueue(chunk);
      });

      ws.on('close', () => {
      readableController?.close();
      });

      const writable = new WritableStream({
      write(chunk) {
      ws.send(chunk);
      },
      close() {
      ws.close();
      },
      abort() {
      ws.close();
      },
      });

      return { readable, writable };
      }
      // Function to execute the Sum RPC call
      // Function to execute the Sum RPC call
      async function executeSquare(rpcClient: RPCClient<Manifest>) {
      try {
      // Sending a number (e.g., 4) to be squared
      const squaredNumber = await rpcClient.methods.SquaredNumberUnary(4);

      // Log the squared number
      console.log(`Squared number is: ${squaredNumber}`);
      } catch (error) {
      // Handle any errors
      console.error(`An error occurred while executing SquaredNumberUnary: ${error}`);
      }
      }

      // Main function to tie everything together
      async function main() {
      try {
      const serverObject = await startServer();
      const rpcClient = await startClient();

      await executeSquare(rpcClient);
      await serverObject.rpcServer.destroy();
      } catch (err) {
      console.error("An error occurred:", err);
      }
      }

      main();
      +
      +

      img.png

      Development

      Run nix-shell, and once you're inside, you can use:

      -
      # install (or reinstall packages from package.json)
      npm install
      # build the dist
      npm run build
      # run the repl (this allows you to import from ./src)
      npm run ts-node
      # run the tests
      npm run test
      # lint the source code
      npm run lint
      # automatically fix the source
      npm run lintfix +
      # install (or reinstall packages from package.json)
      npm install
      # build the dist
      npm run build
      # run the repl (this allows you to import from ./src)
      npm run ts-node
      # run the tests
      npm run test
      # lint the source code
      npm run lint
      # automatically fix the source
      npm run lintfix
      @@ -49,13 +198,13 @@

      Publishing

      Publishing is handled automatically by the staging pipeline.

      Prerelease:

      -
      # npm login
      npm version prepatch --preid alpha # premajor/preminor/prepatch
      git push --follow-tags +
      # npm login
      npm version prepatch --preid alpha # premajor/preminor/prepatch
      git push --follow-tags

      Release:

      -
      # npm login
      npm version patch # major/minor/patch
      git push --follow-tags +
      # npm login
      npm version patch # major/minor/patch
      git push --follow-tags

      Manually:

      -
      # npm login
      npm version patch # major/minor/patch
      npm run build
      npm publish --access public
      git push
      git push --tags +
      # npm login
      npm version patch # major/minor/patch
      npm run build
      npm publish --access public
      git push
      git push --tags

      Domains Diagram: diagram_encapuslated.svg

      @@ -81,17 +230,53 @@

      @matrixai/rpc +
    • Caller
    • +
    • ClientCaller
    • +
    • ClientHandler
    • +
    • DuplexCaller
    • +
    • DuplexHandler
    • +
    • Handler
    • +
    • RPCClient
    • +
    • RPCServer
    • +
    • RawCaller
    • +
    • RawHandler
    • +
    • ServerCaller
    • +
    • ServerHandler
    • +
    • UnaryCaller
    • +
    • UnaryHandler
    • +
    • RPCStream
    • +
    • ClientHandlerImplementation
    • +
    • ClientManifest
    • +
    • ContainerType
    • +
    • DuplexHandlerImplementation
    • +
    • HandlerImplementation
    • +
    • HandlerType
    • +
    • HandlerTypes
    • +
    • IdGen
    • +
    • JSONRPCError
    • +
    • JSONRPCMessage
    • +
    • JSONRPCRequest
    • +
    • JSONRPCRequestMessage
    • +
    • JSONRPCRequestNotification
    • +
    • JSONRPCResponse
    • +
    • JSONRPCResponseError
    • +
    • JSONRPCResponseResult
    • +
    • JSONValue
    • +
    • MapCallers
    • +
    • MiddlewareFactory
    • +
    • POJO
    • +
    • PromiseDeconstructed
    • +
    • RawHandlerImplementation
    • +
    • ServerHandlerImplementation
    • +
    • ServerManifest
    • +
    • StreamFactory
    • +
    • UnaryHandlerImplementation
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/interfaces/types.RPCStream.html b/docs/interfaces/RPCStream.html similarity index 78% rename from docs/interfaces/types.RPCStream.html rename to docs/interfaces/RPCStream.html index 15d7c45..2097e9f 100644 --- a/docs/interfaces/types.RPCStream.html +++ b/docs/interfaces/RPCStream.html @@ -13,8 +13,7 @@
      +
    • RPCStream
    • Interface RPCStream<R, W, M>

      This interface extends the ReadableWritablePair with a method to cancel @@ -30,7 +29,7 @@

      R

    • W

    • -

      M extends POJO = POJO

    • +

      M extends POJO = POJO

      Hierarchy

        @@ -38,7 +37,7 @@

        Hierarchy

        • RPCStream
      +
    • Defined in src/types.ts:200
    • @@ -46,10 +45,10 @@

      Properties

      @@ -70,12 +69,12 @@

      Parameters

      Optional reason: any

      Returns void

      +
    • Defined in src/types.ts:202
    • meta?: M
      +
    • Defined in src/types.ts:203
    • readable: ReadableStream<R>
      -
      -
      -
      - -

      Namespace callers

      -
      -
      -

      Index

      -
      -

      Classes

      -
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/modules/errors.html b/docs/modules/errors.html index 7f3ed11..e091d38 100644 --- a/docs/modules/errors.html +++ b/docs/modules/errors.html @@ -16,7 +16,7 @@
    • errors
    • Namespace errors

      +
    • Defined in src/errors.ts:1
    • Index

      @@ -35,22 +35,20 @@

      Classes

      ErrorRPCConnectionKeepAliveTimeOut ErrorRPCConnectionLocal ErrorRPCConnectionPeer -ErrorRPCDestroyed ErrorRPCHandlerFailed ErrorRPCMessageLength ErrorRPCMethodNotImplemented ErrorRPCMissingResponse ErrorRPCOutputStreamError ErrorRPCParse +ErrorRPCProtocol ErrorRPCRemote +ErrorRPCServer +ErrorRPCServerNotRunning ErrorRPCStopping ErrorRPCStreamEnded ErrorRPCTimedOut ErrorUtilsUndefinedBehaviour -
      -
      -

      Functions

      -
      +
    • ErrorUtilsUndefinedBehaviour
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/modules/events.html b/docs/modules/events.html index c81cb54..61d3a4e 100644 --- a/docs/modules/events.html +++ b/docs/modules/events.html @@ -22,23 +22,15 @@

      Namespace events

      -

      Index

      +
      + +
      + +
      +

      References

      +
      +Renames and re-exports __type
      +
    • sleep
    • Generated using TypeDoc

      \ No newline at end of file diff --git a/docs/types/ClientHandlerImplementation.html b/docs/types/ClientHandlerImplementation.html new file mode 100644 index 0000000..5ec7e54 --- /dev/null +++ b/docs/types/ClientHandlerImplementation.html @@ -0,0 +1,98 @@ +ClientHandlerImplementation | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/ClientManifest.html b/docs/types/ClientManifest.html new file mode 100644 index 0000000..95e61df --- /dev/null +++ b/docs/types/ClientManifest.html @@ -0,0 +1,93 @@ +ClientManifest | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/ContainerType.html b/docs/types/ContainerType.html new file mode 100644 index 0000000..5cf9181 --- /dev/null +++ b/docs/types/ContainerType.html @@ -0,0 +1,91 @@ +ContainerType | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/DuplexHandlerImplementation.html b/docs/types/DuplexHandlerImplementation.html new file mode 100644 index 0000000..fb7e0ae --- /dev/null +++ b/docs/types/DuplexHandlerImplementation.html @@ -0,0 +1,98 @@ +DuplexHandlerImplementation | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/HandlerImplementation.html b/docs/types/HandlerImplementation.html new file mode 100644 index 0000000..dd66766 --- /dev/null +++ b/docs/types/HandlerImplementation.html @@ -0,0 +1,128 @@ +HandlerImplementation | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias HandlerImplementation<I, O>

      +
      HandlerImplementation<I, O>: ((input: I, cancel: ((reason?: any) => void), meta: Record<string, JSONValue> | undefined, ctx: ContextTimed) => O)
      +
      +

      Type Parameters

      +
        +
      • +

        I

      • +
      • +

        O

      +
      +

      Type declaration

      +
        +
      • +
          +
        • (input: I, cancel: ((reason?: any) => void), meta: Record<string, JSONValue> | undefined, ctx: ContextTimed): O
        • +
        • +
          +

          Parameters

          +
            +
          • +
            input: I
          • +
          • +
            cancel: ((reason?: any) => void)
            +
              +
            • +
                +
              • (reason?: any): void
              • +
              • +
                +

                Parameters

                +
                  +
                • +
                  Optional reason: any
                +

                Returns void

          • +
          • +
            meta: Record<string, JSONValue> | undefined
          • +
          • +
            ctx: ContextTimed
          +

          Returns O

      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/HandlerType.html b/docs/types/HandlerType.html new file mode 100644 index 0000000..c9727ce --- /dev/null +++ b/docs/types/HandlerType.html @@ -0,0 +1,91 @@ +HandlerType | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/HandlerTypes.html b/docs/types/HandlerTypes.html new file mode 100644 index 0000000..7852391 --- /dev/null +++ b/docs/types/HandlerTypes.html @@ -0,0 +1,96 @@ +HandlerTypes | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias HandlerTypes<T>

      +
      HandlerTypes<T>: T extends Handler<infer Container, infer Input, infer Output> ? {
          container: Container;
          input: Input;
          output: Output;
      } : never
      +
      +

      Type Parameters

      +
        +
      • +

        T

      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/IdGen.html b/docs/types/IdGen.html new file mode 100644 index 0000000..a37a12e --- /dev/null +++ b/docs/types/IdGen.html @@ -0,0 +1,101 @@ +IdGen | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias IdGen

      +
      IdGen: (() => PromiseLike<string | number | null>)
      +
      +

      Type declaration

      +
        +
      • +
          +
        • (): PromiseLike<string | number | null>
        • +
        • +

          This is the type for the IdGenFunction. It is used to generate the request

          +
          +

          Returns PromiseLike<string | number | null>

      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/JSONRPCError.html b/docs/types/JSONRPCError.html new file mode 100644 index 0000000..6061afa --- /dev/null +++ b/docs/types/JSONRPCError.html @@ -0,0 +1,112 @@ +JSONRPCError | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias JSONRPCError

      +
      JSONRPCError: {
          code: number;
          data?: JSONValue;
          message: string;
      }
      +

      This is a JSON RPC error object, it encodes the error data for the JSONRPCResponseError object.

      +
      +
      +

      Type declaration

      +
        +
      • +
        code: number
        +

        A Number that indicates the error type that occurred. + This MUST be an integer.

        +
      • +
      • +
        Optional data?: JSONValue
        +

        A Primitive or Structured value that contains additional information about the error. + This may be omitted. + The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.).

        +
      • +
      • +
        message: string
        +

        A String providing a short description of the error. + The message SHOULD be limited to a concise single sentence.

        +
      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/JSONRPCMessage.html b/docs/types/JSONRPCMessage.html new file mode 100644 index 0000000..da30ec5 --- /dev/null +++ b/docs/types/JSONRPCMessage.html @@ -0,0 +1,99 @@ +JSONRPCMessage | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/JSONRPCRequest.html b/docs/types/JSONRPCRequest.html new file mode 100644 index 0000000..67c5ff9 --- /dev/null +++ b/docs/types/JSONRPCRequest.html @@ -0,0 +1,99 @@ +JSONRPCRequest | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/JSONRPCRequestMessage.html b/docs/types/JSONRPCRequestMessage.html new file mode 100644 index 0000000..2b43d7a --- /dev/null +++ b/docs/types/JSONRPCRequestMessage.html @@ -0,0 +1,122 @@ +JSONRPCRequestMessage | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias JSONRPCRequestMessage<T>

      +
      JSONRPCRequestMessage<T>: {
          id: string | number | null;
          jsonrpc: "2.0";
          method: string;
          params?: T;
      }
      +

      This is the JSON RPC request object. this is the generic message type used for the RPC.

      +
      +
      +

      Type Parameters

      +
      +
      +

      Type declaration

      +
        +
      • +
        id: string | number | null
        +

        An identifier established by the Client that MUST contain a String, Number, or NULL value if included. + If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers + SHOULD NOT contain fractional parts [2]

        +
      • +
      • +
        jsonrpc: "2.0"
        +

        A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0"

        +
      • +
      • +
        method: string
        +

        A String containing the name of the method to be invoked. Method names that begin with the word rpc followed by a + period character (U+002E or ASCII 46) are reserved for rpc-internal methods and extensions and MUST NOT be used + for anything else.

        +
      • +
      • +
        Optional params?: T
        +

        A Structured value that holds the parameter values to be used during the invocation of the method. + This member MAY be omitted.

        +
      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/JSONRPCRequestNotification.html b/docs/types/JSONRPCRequestNotification.html new file mode 100644 index 0000000..a9660bc --- /dev/null +++ b/docs/types/JSONRPCRequestNotification.html @@ -0,0 +1,117 @@ +JSONRPCRequestNotification | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias JSONRPCRequestNotification<T>

      +
      JSONRPCRequestNotification<T>: {
          jsonrpc: "2.0";
          method: string;
          params?: T;
      }
      +

      This is the JSON RPC notification object. this is used for a request that +doesn't expect a response.

      +
      +
      +

      Type Parameters

      +
      +
      +

      Type declaration

      +
        +
      • +
        jsonrpc: "2.0"
        +

        A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0"

        +
      • +
      • +
        method: string
        +

        A String containing the name of the method to be invoked. Method names that begin with the word rpc followed by a + period character (U+002E or ASCII 46) are reserved for rpc-internal methods and extensions and MUST NOT be used + for anything else.

        +
      • +
      • +
        Optional params?: T
        +

        A Structured value that holds the parameter values to be used during the invocation of the method. + This member MAY be omitted.

        +
      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/JSONRPCResponse.html b/docs/types/JSONRPCResponse.html new file mode 100644 index 0000000..021fa3a --- /dev/null +++ b/docs/types/JSONRPCResponse.html @@ -0,0 +1,98 @@ +JSONRPCResponse | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/JSONRPCResponseError.html b/docs/types/JSONRPCResponseError.html new file mode 100644 index 0000000..3f419dc --- /dev/null +++ b/docs/types/JSONRPCResponseError.html @@ -0,0 +1,114 @@ +JSONRPCResponseError | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias JSONRPCResponseError

      +
      JSONRPCResponseError: {
          error: JSONRPCError;
          id: string | number | null;
          jsonrpc: "2.0";
      }
      +

      This is the JSON RPC response Error object. It contains any errors that have +occurred when responding to a request.

      +
      +
      +

      Type declaration

      +
        +
      • +
        error: JSONRPCError
        +

        This member is REQUIRED on error. + This member MUST NOT exist if there was no error triggered during invocation. + The value for this member MUST be an Object as defined in section 5.1.

        +
      • +
      • +
        id: string | number | null
        +

        This member is REQUIRED. + It MUST be the same as the value of the id member in the Request Object. + If there was an error in detecting the id in the Request object (e.g. Parse error/Invalid Request), + it MUST be Null.

        +
      • +
      • +
        jsonrpc: "2.0"
        +

        A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0".

        +
      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/JSONRPCResponseResult.html b/docs/types/JSONRPCResponseResult.html new file mode 100644 index 0000000..179bcb3 --- /dev/null +++ b/docs/types/JSONRPCResponseResult.html @@ -0,0 +1,119 @@ +JSONRPCResponseResult | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias JSONRPCResponseResult<T>

      +
      JSONRPCResponseResult<T>: {
          id: string | number | null;
          jsonrpc: "2.0";
          result: T;
      }
      +

      This is the JSON RPC response result object. It contains the response data for a +corresponding request.

      +
      +
      +

      Type Parameters

      +
      +
      +

      Type declaration

      +
        +
      • +
        id: string | number | null
        +

        This member is REQUIRED. + It MUST be the same as the value of the id member in the Request Object. + If there was an error in detecting the id in the Request object (e.g. Parse error/Invalid Request), + it MUST be Null.

        +
      • +
      • +
        jsonrpc: "2.0"
        +

        A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0".

        +
      • +
      • +
        result: T
        +

        This member is REQUIRED on success. + This member MUST NOT exist if there was an error invoking the method. + The value of this member is determined by the method invoked on the Server.

        +
      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/JSONValue.html b/docs/types/JSONValue.html new file mode 100644 index 0000000..bf502f5 --- /dev/null +++ b/docs/types/JSONValue.html @@ -0,0 +1,91 @@ +JSONValue | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/MapCallers.html b/docs/types/MapCallers.html new file mode 100644 index 0000000..8943595 --- /dev/null +++ b/docs/types/MapCallers.html @@ -0,0 +1,96 @@ +MapCallers | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/MiddlewareFactory.html b/docs/types/MiddlewareFactory.html new file mode 100644 index 0000000..833a97c --- /dev/null +++ b/docs/types/MiddlewareFactory.html @@ -0,0 +1,145 @@ +MiddlewareFactory | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias MiddlewareFactory<FR, FW, RR, RW>

      +
      MiddlewareFactory<FR, FW, RR, RW>: ((ctx: ContextTimed, cancel: ((reason?: any) => void), meta: Record<string, JSONValue> | undefined) => {
          forward: ReadableWritablePair<FR, FW>;
          reverse: ReadableWritablePair<RR, RW>;
      })
      +
      +

      Type Parameters

      +
        +
      • +

        FR

      • +
      • +

        FW

      • +
      • +

        RR

      • +
      • +

        RW

      +
      +

      Type declaration

      +
        +
      • +
          +
        • (ctx: ContextTimed, cancel: ((reason?: any) => void), meta: Record<string, JSONValue> | undefined): {
              forward: ReadableWritablePair<FR, FW>;
              reverse: ReadableWritablePair<RR, RW>;
          }
        • +
        • +

          Middleware factory creates middlewares. +Each middleware is a pair of forward and reverse. +Each forward and reverse is a ReadableWritablePair. +The forward pair is used transform input from client to server. +The reverse pair is used to transform output from server to client. +FR, FW is the readable and writable types of the forward pair. +RR, RW is the readable and writable types of the reverse pair. +FW -> FR is the direction of data flow from client to server. +RW -> RR is the direction of data flow from server to client.

          +
          +
          +

          Parameters

          +
            +
          • +
            ctx: ContextTimed
          • +
          • +
            cancel: ((reason?: any) => void)
            +
              +
            • +
                +
              • (reason?: any): void
              • +
              • +
                +

                Parameters

                +
                  +
                • +
                  Optional reason: any
                +

                Returns void

          • +
          • +
            meta: Record<string, JSONValue> | undefined
          +

          Returns {
              forward: ReadableWritablePair<FR, FW>;
              reverse: ReadableWritablePair<RR, RW>;
          }

          +
            +
          • +
            forward: ReadableWritablePair<FR, FW>
          • +
          • +
            reverse: ReadableWritablePair<RR, RW>
      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/POJO.html b/docs/types/POJO.html new file mode 100644 index 0000000..7de1ecd --- /dev/null +++ b/docs/types/POJO.html @@ -0,0 +1,96 @@ +POJO | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/types.PromiseDeconstructed.html b/docs/types/PromiseDeconstructed.html similarity index 50% rename from docs/types/types.PromiseDeconstructed.html rename to docs/types/PromiseDeconstructed.html index 2d31310..42bc562 100644 --- a/docs/types/types.PromiseDeconstructed.html +++ b/docs/types/PromiseDeconstructed.html @@ -13,8 +13,7 @@
      +
    • PromiseDeconstructed
    • Type alias PromiseDeconstructed<T>

      PromiseDeconstructed<T>: {
          p: Promise<T>;
          rejectP: ((reason?: any) => void);
          resolveP: ((value: T | PromiseLike<T>) => void);
      }
      @@ -54,7 +53,7 @@

      Parameters

      value: T | PromiseLike<T>

      Returns void

      +
    • Defined in src/types.ts:333
    • +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/ServerHandlerImplementation.html b/docs/types/ServerHandlerImplementation.html new file mode 100644 index 0000000..14f252b --- /dev/null +++ b/docs/types/ServerHandlerImplementation.html @@ -0,0 +1,98 @@ +ServerHandlerImplementation | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/ServerManifest.html b/docs/types/ServerManifest.html new file mode 100644 index 0000000..28f9e24 --- /dev/null +++ b/docs/types/ServerManifest.html @@ -0,0 +1,93 @@ +ServerManifest | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/StreamFactory.html b/docs/types/StreamFactory.html new file mode 100644 index 0000000..b05ac83 --- /dev/null +++ b/docs/types/StreamFactory.html @@ -0,0 +1,109 @@ +StreamFactory | @matrixai/rpc
      +
      + +
      +
      +
      +
      + +

      Type alias StreamFactory

      +
      StreamFactory: ((ctx: ContextTimed) => PromiseLike<RPCStream<Uint8Array, Uint8Array>>)
      +
      +

      Type declaration

      +
        +
      • +
          +
        • (ctx: ContextTimed): PromiseLike<RPCStream<Uint8Array, Uint8Array>>
        • +
        • +

          This is a factory for creating a RPCStream when making a RPC call. +The transport mechanism is a black box to the RPC system. So long as it is +provided as a RPCStream the RPC system should function. It is assumed that +the RPCStream communicates with an RPCServer.

          +
          +
          +

          Parameters

          +
            +
          • +
            ctx: ContextTimed
          +

          Returns PromiseLike<RPCStream<Uint8Array, Uint8Array>>

      +
      +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/UnaryHandlerImplementation.html b/docs/types/UnaryHandlerImplementation.html new file mode 100644 index 0000000..ca31430 --- /dev/null +++ b/docs/types/UnaryHandlerImplementation.html @@ -0,0 +1,98 @@ +UnaryHandlerImplementation | @matrixai/rpc
      +
      + +
      + +
      +

      Generated using TypeDoc

      +
      \ No newline at end of file diff --git a/docs/types/types.ClientHandlerImplementation.html b/docs/types/types.ClientHandlerImplementation.html deleted file mode 100644 index a848634..0000000 --- a/docs/types/types.ClientHandlerImplementation.html +++ /dev/null @@ -1,87 +0,0 @@ -ClientHandlerImplementation | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.ClientManifest.html b/docs/types/types.ClientManifest.html deleted file mode 100644 index de24d34..0000000 --- a/docs/types/types.ClientManifest.html +++ /dev/null @@ -1,82 +0,0 @@ -ClientManifest | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.ContainerType.html b/docs/types/types.ContainerType.html deleted file mode 100644 index 8fb48d9..0000000 --- a/docs/types/types.ContainerType.html +++ /dev/null @@ -1,80 +0,0 @@ -ContainerType | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.DuplexHandlerImplementation.html b/docs/types/types.DuplexHandlerImplementation.html deleted file mode 100644 index 87cc81e..0000000 --- a/docs/types/types.DuplexHandlerImplementation.html +++ /dev/null @@ -1,87 +0,0 @@ -DuplexHandlerImplementation | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.HandlerImplementation.html b/docs/types/types.HandlerImplementation.html deleted file mode 100644 index 9597b2e..0000000 --- a/docs/types/types.HandlerImplementation.html +++ /dev/null @@ -1,117 +0,0 @@ -HandlerImplementation | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias HandlerImplementation<I, O>

      -
      HandlerImplementation<I, O>: ((input: I, cancel: ((reason?: any) => void), meta: Record<string, JSONValue> | undefined, ctx: ContextTimed) => O)
      -
      -

      Type Parameters

      -
        -
      • -

        I

      • -
      • -

        O

      -
      -

      Type declaration

      -
        -
      • -
          -
        • (input: I, cancel: ((reason?: any) => void), meta: Record<string, JSONValue> | undefined, ctx: ContextTimed): O
        • -
        • -
          -

          Parameters

          -
            -
          • -
            input: I
          • -
          • -
            cancel: ((reason?: any) => void)
            -
              -
            • -
                -
              • (reason?: any): void
              • -
              • -
                -

                Parameters

                -
                  -
                • -
                  Optional reason: any
                -

                Returns void

          • -
          • -
            meta: Record<string, JSONValue> | undefined
          • -
          • -
            ctx: ContextTimed
          -

          Returns O

      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.HandlerType.html b/docs/types/types.HandlerType.html deleted file mode 100644 index 208b41a..0000000 --- a/docs/types/types.HandlerType.html +++ /dev/null @@ -1,80 +0,0 @@ -HandlerType | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.IdGen.html b/docs/types/types.IdGen.html deleted file mode 100644 index bbe1b44..0000000 --- a/docs/types/types.IdGen.html +++ /dev/null @@ -1,90 +0,0 @@ -IdGen | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias IdGen

      -
      IdGen: (() => PromiseLike<string | number | null>)
      -
      -

      Type declaration

      -
        -
      • -
          -
        • (): PromiseLike<string | number | null>
        • -
        • -

          This is the type for the IdGenFunction. It is used to generate the request

          -
          -

          Returns PromiseLike<string | number | null>

      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.JSONRPCError.html b/docs/types/types.JSONRPCError.html deleted file mode 100644 index 87e3001..0000000 --- a/docs/types/types.JSONRPCError.html +++ /dev/null @@ -1,103 +0,0 @@ -JSONRPCError | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias JSONRPCError

      -
      JSONRPCError: {
          code: number;
          data?: JSONValue;
          message: string;
          type: string | ErrorRPC<any>;
      }
      -

      This is a JSON RPC error object, it encodes the error data for the JSONRPCResponseError object.

      -
      -
      -

      Type declaration

      -
        -
      • -
        code: number
        -

        A Number that indicates the error type that occurred. - This MUST be an integer.

        -
      • -
      • -
        Optional data?: JSONValue
        -

        A Primitive or Structured value that contains additional information about the error. - This may be omitted. - The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.).

        -
      • -
      • -
        message: string
        -

        A String providing a short description of the error. - The message SHOULD be limited to a concise single sentence.

        -
      • -
      • -
        type: string | ErrorRPC<any>
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.JSONRPCMessage.html b/docs/types/types.JSONRPCMessage.html deleted file mode 100644 index af0e679..0000000 --- a/docs/types/types.JSONRPCMessage.html +++ /dev/null @@ -1,88 +0,0 @@ -JSONRPCMessage | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias JSONRPCMessage<T>

      -
      JSONRPCMessage<T>: JSONRPCRequest<T> | JSONRPCResponse<T>
      -

      This is a JSON RPC Message object. This is top level and can be any kind of -message.

      -
      -
      -

      Type Parameters

      -
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.JSONRPCRequest.html b/docs/types/types.JSONRPCRequest.html deleted file mode 100644 index b3a65ed..0000000 --- a/docs/types/types.JSONRPCRequest.html +++ /dev/null @@ -1,88 +0,0 @@ -JSONRPCRequest | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias JSONRPCRequest<T>

      - -

      This is the JSON RPC Request object. It can be a request message or -notification.

      -
      -
      -

      Type Parameters

      -
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.JSONRPCRequestMessage.html b/docs/types/types.JSONRPCRequestMessage.html deleted file mode 100644 index 5abbe6f..0000000 --- a/docs/types/types.JSONRPCRequestMessage.html +++ /dev/null @@ -1,111 +0,0 @@ -JSONRPCRequestMessage | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias JSONRPCRequestMessage<T>

      -
      JSONRPCRequestMessage<T>: {
          id: string | number | null;
          jsonrpc: "2.0";
          method: string;
          params?: T;
      }
      -

      This is the JSON RPC request object. this is the generic message type used for the RPC.

      -
      -
      -

      Type Parameters

      -
      -
      -

      Type declaration

      -
        -
      • -
        id: string | number | null
        -

        An identifier established by the Client that MUST contain a String, Number, or NULL value if included. - If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers - SHOULD NOT contain fractional parts [2]

        -
      • -
      • -
        jsonrpc: "2.0"
        -

        A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0"

        -
      • -
      • -
        method: string
        -

        A String containing the name of the method to be invoked. Method names that begin with the word rpc followed by a - period character (U+002E or ASCII 46) are reserved for rpc-internal methods and extensions and MUST NOT be used - for anything else.

        -
      • -
      • -
        Optional params?: T
        -

        A Structured value that holds the parameter values to be used during the invocation of the method. - This member MAY be omitted.

        -
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.JSONRPCRequestNotification.html b/docs/types/types.JSONRPCRequestNotification.html deleted file mode 100644 index 40e701e..0000000 --- a/docs/types/types.JSONRPCRequestNotification.html +++ /dev/null @@ -1,106 +0,0 @@ -JSONRPCRequestNotification | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias JSONRPCRequestNotification<T>

      -
      JSONRPCRequestNotification<T>: {
          jsonrpc: "2.0";
          method: string;
          params?: T;
      }
      -

      This is the JSON RPC notification object. this is used for a request that -doesn't expect a response.

      -
      -
      -

      Type Parameters

      -
      -
      -

      Type declaration

      -
        -
      • -
        jsonrpc: "2.0"
        -

        A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0"

        -
      • -
      • -
        method: string
        -

        A String containing the name of the method to be invoked. Method names that begin with the word rpc followed by a - period character (U+002E or ASCII 46) are reserved for rpc-internal methods and extensions and MUST NOT be used - for anything else.

        -
      • -
      • -
        Optional params?: T
        -

        A Structured value that holds the parameter values to be used during the invocation of the method. - This member MAY be omitted.

        -
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.JSONRPCResponse.html b/docs/types/types.JSONRPCResponse.html deleted file mode 100644 index c07ab95..0000000 --- a/docs/types/types.JSONRPCResponse.html +++ /dev/null @@ -1,87 +0,0 @@ -JSONRPCResponse | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.JSONRPCResponseError.html b/docs/types/types.JSONRPCResponseError.html deleted file mode 100644 index 05cd623..0000000 --- a/docs/types/types.JSONRPCResponseError.html +++ /dev/null @@ -1,103 +0,0 @@ -JSONRPCResponseError | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias JSONRPCResponseError

      -
      JSONRPCResponseError: {
          error: JSONRPCError;
          id: string | number | null;
          jsonrpc: "2.0";
      }
      -

      This is the JSON RPC response Error object. It contains any errors that have -occurred when responding to a request.

      -
      -
      -

      Type declaration

      -
        -
      • -
        error: JSONRPCError
        -

        This member is REQUIRED on error. - This member MUST NOT exist if there was no error triggered during invocation. - The value for this member MUST be an Object as defined in section 5.1.

        -
      • -
      • -
        id: string | number | null
        -

        This member is REQUIRED. - It MUST be the same as the value of the id member in the Request Object. - If there was an error in detecting the id in the Request object (e.g. Parse error/Invalid Request), - it MUST be Null.

        -
      • -
      • -
        jsonrpc: "2.0"
        -

        A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0".

        -
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.JSONRPCResponseResult.html b/docs/types/types.JSONRPCResponseResult.html deleted file mode 100644 index 8ef390d..0000000 --- a/docs/types/types.JSONRPCResponseResult.html +++ /dev/null @@ -1,108 +0,0 @@ -JSONRPCResponseResult | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias JSONRPCResponseResult<T>

      -
      JSONRPCResponseResult<T>: {
          id: string | number | null;
          jsonrpc: "2.0";
          result: T;
      }
      -

      This is the JSON RPC response result object. It contains the response data for a -corresponding request.

      -
      -
      -

      Type Parameters

      -
      -
      -

      Type declaration

      -
        -
      • -
        id: string | number | null
        -

        This member is REQUIRED. - It MUST be the same as the value of the id member in the Request Object. - If there was an error in detecting the id in the Request object (e.g. Parse error/Invalid Request), - it MUST be Null.

        -
      • -
      • -
        jsonrpc: "2.0"
        -

        A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0".

        -
      • -
      • -
        result: T
        -

        This member is REQUIRED on success. - This member MUST NOT exist if there was an error invoking the method. - The value of this member is determined by the method invoked on the Server.

        -
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.JSONValue.html b/docs/types/types.JSONValue.html deleted file mode 100644 index cdc8a1f..0000000 --- a/docs/types/types.JSONValue.html +++ /dev/null @@ -1,80 +0,0 @@ -JSONValue | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.MapCallers.html b/docs/types/types.MapCallers.html deleted file mode 100644 index dc246c9..0000000 --- a/docs/types/types.MapCallers.html +++ /dev/null @@ -1,85 +0,0 @@ -MapCallers | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.MiddlewareFactory.html b/docs/types/types.MiddlewareFactory.html deleted file mode 100644 index 350dd00..0000000 --- a/docs/types/types.MiddlewareFactory.html +++ /dev/null @@ -1,134 +0,0 @@ -MiddlewareFactory | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias MiddlewareFactory<FR, FW, RR, RW>

      -
      MiddlewareFactory<FR, FW, RR, RW>: ((ctx: ContextTimed, cancel: ((reason?: any) => void), meta: Record<string, JSONValue> | undefined) => {
          forward: ReadableWritablePair<FR, FW>;
          reverse: ReadableWritablePair<RR, RW>;
      })
      -
      -

      Type Parameters

      -
        -
      • -

        FR

      • -
      • -

        FW

      • -
      • -

        RR

      • -
      • -

        RW

      -
      -

      Type declaration

      -
        -
      • -
          -
        • (ctx: ContextTimed, cancel: ((reason?: any) => void), meta: Record<string, JSONValue> | undefined): {
              forward: ReadableWritablePair<FR, FW>;
              reverse: ReadableWritablePair<RR, RW>;
          }
        • -
        • -

          Middleware factory creates middlewares. -Each middleware is a pair of forward and reverse. -Each forward and reverse is a ReadableWritablePair. -The forward pair is used transform input from client to server. -The reverse pair is used to transform output from server to client. -FR, FW is the readable and writable types of the forward pair. -RR, RW is the readable and writable types of the reverse pair. -FW -> FR is the direction of data flow from client to server. -RW -> RR is the direction of data flow from server to client.

          -
          -
          -

          Parameters

          -
            -
          • -
            ctx: ContextTimed
          • -
          • -
            cancel: ((reason?: any) => void)
            -
              -
            • -
                -
              • (reason?: any): void
              • -
              • -
                -

                Parameters

                -
                  -
                • -
                  Optional reason: any
                -

                Returns void

          • -
          • -
            meta: Record<string, JSONValue> | undefined
          -

          Returns {
              forward: ReadableWritablePair<FR, FW>;
              reverse: ReadableWritablePair<RR, RW>;
          }

          -
            -
          • -
            forward: ReadableWritablePair<FR, FW>
          • -
          • -
            reverse: ReadableWritablePair<RR, RW>
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.POJO.html b/docs/types/types.POJO.html deleted file mode 100644 index 2219844..0000000 --- a/docs/types/types.POJO.html +++ /dev/null @@ -1,85 +0,0 @@ -POJO | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.RawHandlerImplementation.html b/docs/types/types.RawHandlerImplementation.html deleted file mode 100644 index f45a714..0000000 --- a/docs/types/types.RawHandlerImplementation.html +++ /dev/null @@ -1,80 +0,0 @@ -RawHandlerImplementation | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.ServerHandlerImplementation.html b/docs/types/types.ServerHandlerImplementation.html deleted file mode 100644 index c64fbe8..0000000 --- a/docs/types/types.ServerHandlerImplementation.html +++ /dev/null @@ -1,87 +0,0 @@ -ServerHandlerImplementation | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.ServerManifest.html b/docs/types/types.ServerManifest.html deleted file mode 100644 index 3a8416b..0000000 --- a/docs/types/types.ServerManifest.html +++ /dev/null @@ -1,82 +0,0 @@ -ServerManifest | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias ServerManifest

      -
      ServerManifest: Record<string, Handler>
      -

      Contains the handler Classes that defines the handling logic and types for the server handlers.

      -
      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.StreamFactory.html b/docs/types/types.StreamFactory.html deleted file mode 100644 index dd9be8a..0000000 --- a/docs/types/types.StreamFactory.html +++ /dev/null @@ -1,98 +0,0 @@ -StreamFactory | @matrixai/rpc
      -
      - -
      -
      -
      -
      - -

      Type alias StreamFactory

      -
      StreamFactory: ((ctx: ContextTimed) => PromiseLike<RPCStream<Uint8Array, Uint8Array>>)
      -
      -

      Type declaration

      -
        -
      • -
          -
        • (ctx: ContextTimed): PromiseLike<RPCStream<Uint8Array, Uint8Array>>
        • -
        • -

          This is a factory for creating a RPCStream when making a RPC call. -The transport mechanism is a black box to the RPC system. So long as it is -provided as a RPCStream the RPC system should function. It is assumed that -the RPCStream communicates with an RPCServer.

          -
          -
          -

          Parameters

          -
            -
          • -
            ctx: ContextTimed
          -

          Returns PromiseLike<RPCStream<Uint8Array, Uint8Array>>

      -
      -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/docs/types/types.UnaryHandlerImplementation.html b/docs/types/types.UnaryHandlerImplementation.html deleted file mode 100644 index e266b56..0000000 --- a/docs/types/types.UnaryHandlerImplementation.html +++ /dev/null @@ -1,87 +0,0 @@ -UnaryHandlerImplementation | @matrixai/rpc
      -
      - -
      - -
      -

      Generated using TypeDoc

      -
      \ No newline at end of file diff --git a/scripts/choco-install.ps1 b/scripts/choco-install.ps1 old mode 100755 new mode 100644 diff --git a/src/RPCClient.ts b/src/RPCClient.ts index 2ebd8cb..abaed2c 100644 --- a/src/RPCClient.ts +++ b/src/RPCClient.ts @@ -1,87 +1,34 @@ import type { WritableStream, ReadableStream } from 'stream/web'; import type { ContextTimedInput } from '@matrixai/contexts'; import type { + IdGen, HandlerType, + JSONValue, JSONRPCRequestMessage, - StreamFactory, - ClientManifest, - RPCStream, - JSONRPCResponseResult, -} from './types'; -import type { JSONValue, IdGen } from './types'; -import type { JSONRPCRequest, JSONRPCResponse, MiddlewareFactory, MapCallers, + StreamFactory, + ClientManifest, + RPCStream, + JSONRPCResponseResult, } from './types'; -import type { ErrorRPCRemote } from './errors'; +import type { ErrorRPC } from './errors'; import Logger from '@matrixai/logger'; import { Timer } from '@matrixai/timer'; -import * as rpcUtilsMiddleware from './middleware'; -import * as rpcErrors from './errors'; -import * as rpcUtils from './utils'; -import { promise } from './utils'; -import { ErrorRPCStreamEnded, never } from './errors'; -import * as events from './events'; -import { toError } from './utils'; +import * as middleware from './middleware'; +import * as errors from './errors'; +import * as utils from './utils'; const timerCleanupReasonSymbol = Symbol('timerCleanUpReasonSymbol'); -interface RPCClient {} - class RPCClient { - /** - * @param obj - * @param obj.manifest - Client manifest that defines the types for the rpc - * methods. - * @param obj.streamFactory - An arrow function that when called, creates a - * new stream for each rpc method call. - * @param obj.middlewareFactory - Middleware used to process the rpc messages. - * The middlewareFactory needs to be a function that creates a pair of - * transform streams that convert `JSONRPCRequest` to `Uint8Array` on the forward - * path and `Uint8Array` to `JSONRPCResponse` on the reverse path. - * @param obj.streamKeepAliveTimeoutTime - Timeout time used if no timeout timer was provided when making a call. - * Defaults to 60,000 milliseconds. - * for a client call. - * @param obj.logger - */ - static async createRPCClient({ - manifest, - streamFactory, - middlewareFactory = rpcUtilsMiddleware.defaultClientMiddlewareWrapper(), - streamKeepAliveTimeoutTime = Infinity, // 1 minute - logger = new Logger(this.name), - idGen = () => Promise.resolve(null), - }: { - manifest: M; - streamFactory: StreamFactory; - middlewareFactory?: MiddlewareFactory< - Uint8Array, - JSONRPCRequest, - JSONRPCResponse, - Uint8Array - >; - streamKeepAliveTimeoutTime?: number; - logger?: Logger; - idGen?: IdGen; - }) { - logger.info(`Creating ${this.name}`); - const rpcClient = new this({ - manifest, - streamFactory, - middlewareFactory, - streamKeepAliveTimeoutTime: streamKeepAliveTimeoutTime, - logger, - idGen, - }); - logger.info(`Created ${this.name}`); - return rpcClient; - } protected onTimeoutCallback?: () => void; protected idGen: IdGen; protected logger: Logger; protected streamFactory: StreamFactory; + protected toError?: typeof utils.toError; protected middlewareFactory: MiddlewareFactory< Uint8Array, JSONRPCRequest, @@ -118,46 +65,53 @@ class RPCClient { }, ); + /** + * @param obj + * @param obj.manifest - Client manifest that defines the types for the rpc + * methods. + * @param obj.streamFactory - An arrow function that when called, creates a + * new stream for each rpc method call. + * @param obj.middlewareFactory - Middleware used to process the rpc messages. + * The middlewareFactory needs to be a function that creates a pair of + * transform streams that convert `JSONRPCRequest` to `Uint8Array` on the forward + * path and `Uint8Array` to `JSONRPCResponse` on the reverse path. + * @param obj.streamKeepAliveTimeoutTime - Timeout time used if no timeout timer was provided when making a call. + * Defaults to 60,000 milliseconds. + * for a client call. + * @param obj.logger + */ public constructor({ manifest, streamFactory, - middlewareFactory, - streamKeepAliveTimeoutTime, + middlewareFactory = middleware.defaultClientMiddlewareWrapper(), + streamKeepAliveTimeoutTime = Infinity, logger, + toError, idGen = () => Promise.resolve(null), }: { manifest: M; streamFactory: StreamFactory; - middlewareFactory: MiddlewareFactory< + middlewareFactory?: MiddlewareFactory< Uint8Array, JSONRPCRequest, JSONRPCResponse, Uint8Array >; - streamKeepAliveTimeoutTime: number; - logger: Logger; - idGen: IdGen; + streamKeepAliveTimeoutTime?: number; + logger?: Logger; + idGen?: IdGen; + toError?: ( + errorData: JSONValue, + metadata: Record, + ) => ErrorRPC; }) { this.idGen = idGen; - this.callerTypes = rpcUtils.getHandlerTypes(manifest); + this.callerTypes = utils.getHandlerTypes(manifest); this.streamFactory = streamFactory; this.middlewareFactory = middlewareFactory; this.streamKeepAliveTimeoutTime = streamKeepAliveTimeoutTime; - this.logger = logger; - } - - public async destroy({ - errorCode = rpcErrors.JSONRPCErrorCode.RPCStopping, - errorMessage = '', - force = true, - }: { - errorCode?: number; - errorMessage?: string; - force?: boolean; - } = {}): Promise { - this.logger.info(`Destroying ${this.constructor.name}`); - - this.logger.info(`Destroyed ${this.constructor.name}`); + this.logger = logger ?? new Logger(this.constructor.name); + this.toError = toError; } public get methods(): MapCallers { @@ -185,7 +139,7 @@ class RPCClient { await writer.write(parameters); const output = await reader.read(); if (output.done) { - throw new rpcErrors.ErrorMissingCaller('Missing response', { + throw new errors.ErrorMissingCaller('Missing response', { cause: ctx.signal?.reason, }); } @@ -248,7 +202,7 @@ class RPCClient { const reader = callerInterface.readable.getReader(); const output = reader.read().then(({ value, done }) => { if (done) { - throw new rpcErrors.ErrorMissingCaller('Missing response', { + throw new errors.ErrorMissingCaller('Missing response', { cause: ctx.signal?.reason, }); } @@ -279,7 +233,7 @@ class RPCClient { const abortController = new AbortController(); const signal = abortController.signal; // A promise that will reject if there is an abort signal or timeout - const abortRaceProm = promise(); + const abortRaceProm = utils.promise(); // Prevent unhandled rejection when we're done with the promise abortRaceProm.p.catch(() => {}); const abortRacePromHandler = () => { @@ -313,7 +267,7 @@ class RPCClient { signal.addEventListener('abort', abortRacePromHandler); }; // Setting up abort events for timeout - const timeoutError = new rpcErrors.ErrorRPCTimedOut( + const timeoutError = new errors.ErrorRPCTimedOut( 'Error RPC has timed out', { cause: ctx.signal?.reason }, ); @@ -335,14 +289,14 @@ class RPCClient { } catch (e) { cleanUp(); void streamFactoryProm.then((stream) => - stream.cancel(ErrorRPCStreamEnded), + stream.cancel(errors.ErrorRPCStreamEnded), ); throw e; } void timer.then( () => { rpcStream.cancel( - new rpcErrors.ErrorRPCTimedOut('RPC has timed out', { + new errors.ErrorRPCTimedOut('RPC has timed out', { cause: ctx.signal?.reason, }), ); @@ -358,9 +312,11 @@ class RPCClient { ...(rpcStream.meta ?? {}), command: method, }; - const outputMessageTransformStream = - rpcUtils.clientOutputTransformStream(metadata, refreshingTimer); - const inputMessageTransformStream = rpcUtils.clientInputTransformStream( + const outputMessageTransformStream = utils.clientOutputTransformStream( + metadata, + refreshingTimer, + ); + const inputMessageTransformStream = utils.clientInputTransformStream( method, refreshingTimer, ); @@ -425,7 +381,7 @@ class RPCClient { const abortController = new AbortController(); const signal = abortController.signal; // A promise that will reject if there is an abort signal or timeout - const abortRaceProm = promise(); + const abortRaceProm = utils.promise(); // Prevent unhandled rejection when we're done with the promise abortRaceProm.p.catch(() => {}); const abortRacePromHandler = () => { @@ -459,7 +415,7 @@ class RPCClient { signal.addEventListener('abort', abortRacePromHandler); }; // Setting up abort events for timeout - const timeoutError = new rpcErrors.ErrorRPCTimedOut('RPC has timed out', { + const timeoutError = new errors.ErrorRPCTimedOut('RPC has timed out', { cause: ctx.signal?.reason, }); void timer.then( @@ -473,7 +429,7 @@ class RPCClient { [JSONValue, RPCStream] > => { if (signal.aborted) throw signal.reason; - const abortProm = promise(); + const abortProm = utils.promise(); // Ignore error if orphaned void abortProm.p.catch(() => {}); signal.addEventListener( @@ -497,8 +453,8 @@ class RPCClient { }; await tempWriter.write(Buffer.from(JSON.stringify(header))); tempWriter.releaseLock(); - const headTransformStream = rpcUtils.parseHeadStream( - rpcUtils.parseJSONRPCResponse, + const headTransformStream = utils.parseHeadStream( + utils.parseJSONRPCResponse, ); void rpcStream.readable // Allow us to re-use the readable after reading the first message @@ -510,18 +466,18 @@ class RPCClient { try { const message = await Promise.race([tempReader.read(), abortProm.p]); const messageValue = message.value as JSONRPCResponse; - if (message.done) never(); + if (message.done) utils.never(); if ('error' in messageValue) { const metadata = { ...(rpcStream.meta ?? {}), command: method, }; - throw toError(messageValue.error.data, metadata); + throw utils.toError(messageValue.error, metadata); } leadingMessage = messageValue; } catch (e) { rpcStream.cancel( - new ErrorRPCStreamEnded('RPC Stream Ended', { cause: e }), + new errors.ErrorRPCStreamEnded('RPC Stream Ended', { cause: e }), ); throw e; } diff --git a/src/RPCServer.ts b/src/RPCServer.ts index b24e3e0..513fcd4 100644 --- a/src/RPCServer.ts +++ b/src/RPCServer.ts @@ -1,7 +1,9 @@ import type { ReadableStreamDefaultReadResult } from 'stream/web'; import type { + IdGen, ClientHandlerImplementation, DuplexHandlerImplementation, + JSONValue, JSONRPCError, JSONRPCRequest, JSONRPCResponse, @@ -14,25 +16,22 @@ import type { RPCStream, MiddlewareFactory, } from './types'; -import type { JSONValue } from './types'; -import type { IdGen } from './types'; -import type { ErrorRPC, ErrorRPCRemote } from './errors'; import { ReadableStream, TransformStream } from 'stream/web'; -import { ready } from '@matrixai/async-init/dist/StartStop'; import Logger from '@matrixai/logger'; import { PromiseCancellable } from '@matrixai/async-cancellable'; import { Timer } from '@matrixai/timer'; import { startStop } from '@matrixai/async-init'; +import { StartStop } from '@matrixai/async-init/dist/StartStop'; import { RawHandler } from './handlers'; -import { DuplexHandler } from './handlers'; -import { ServerHandler } from './handlers'; -import { UnaryHandler } from './handlers'; -import { ClientHandler } from './handlers'; -import * as rpcEvents from './events'; -import * as rpcUtils from './utils'; -import * as rpcErrors from './errors'; -import * as rpcUtilsMiddleware from './middleware'; -import { ErrorHandlerAborted, JSONRPCErrorCode, never } from './errors'; +import { + DuplexHandler, + ServerHandler, + UnaryHandler, + ClientHandler, +} from './handlers'; +import * as utils from './utils'; +import * as errors from './errors'; +import * as middleware from './middleware'; import * as events from './events'; const cleanupReason = Symbol('CleanupReason'); @@ -46,67 +45,13 @@ const cleanupReason = Symbol('CleanupReason'); */ interface RPCServer extends startStop.StartStop {} -@startStop.StartStop({ +@StartStop({ eventStart: events.EventRPCServerStart, eventStarted: events.EventRPCServerStarted, eventStop: events.EventRPCServerStopping, eventStopped: events.EventRPCServerStopped, }) -class RPCServer extends EventTarget { - /** - * Starts RPC server. - - * @param obj - * @param obj.manifest - Server manifest used to define the rpc method - * handlers. - * @param obj.middlewareFactory - Middleware used to process the rpc messages. - * The middlewareFactory needs to be a function that creates a pair of - * transform streams that convert `Uint8Array` to `JSONRPCRequest` on the forward - * path and `JSONRPCResponse` to `Uint8Array` on the reverse path. - * @param obj.streamKeepAliveTimeoutTime - Time before a connection is cleaned up due to no activity. This is the - * value used if the handler doesn't specify its own timeout time. This timeout is advisory and only results in a - * signal sent to the handler. Stream is forced to end after the timeoutForceCloseTime. Defaults to 60,000 - * milliseconds. - * @param obj.timeoutForceCloseTime - Time before the stream is forced to end after the initial timeout time. - * The stream will be forced to close after this amount of time after the initial timeout. This is a grace period for - * the handler to handle timeout before it is forced to end. Defaults to 2,000 milliseconds. - * @param obj.logger - */ - public static async start({ - manifest, - middlewareFactory = rpcUtilsMiddleware.defaultServerMiddlewareWrapper(), - handlerTimeoutTime = Infinity, // 1 minute - logger = new Logger(this.name), - idGen = () => Promise.resolve(null), - fromError = rpcUtils.fromError, - filterSensitive = rpcUtils.filterSensitive, - }: { - manifest: ServerManifest; - middlewareFactory?: MiddlewareFactory< - JSONRPCRequest, - Uint8Array, - Uint8Array, - JSONRPCResponse - >; - handlerTimeoutTime?: number; - logger?: Logger; - idGen?: IdGen; - fromError?: (error: ErrorRPC) => JSONValue; - filterSensitive?: (key: string, value: any) => any; - }): Promise { - logger.info(`Starting ${this.name}`); - const rpcServer = new this({ - manifest, - middlewareFactory, - handlerTimeoutTime, - logger, - idGen, - fromError, - filterSensitive, - }); - logger.info(`Started ${this.name}`); - return rpcServer; - } +class RPCServer { protected onTimeoutCallback?: () => void; protected idGen: IdGen; protected logger: Logger; @@ -114,7 +59,7 @@ class RPCServer extends EventTarget { protected defaultTimeoutMap: Map = new Map(); protected handlerTimeoutTime: number; protected activeStreams: Set> = new Set(); - protected fromError: (error: ErrorRPC) => JSONValue; + protected fromError: (error: errors.ErrorRPC) => JSONValue; protected filterSensitive: (key: string, value: any) => any; protected middlewareFactory: MiddlewareFactory< JSONRPCRequest, @@ -126,30 +71,63 @@ class RPCServer extends EventTarget { public registerOnTimeoutCallback(callback: () => void) { this.onTimeoutCallback = callback; } + + /** + * RPCServer Constructor + * + * @param obj.middlewareFactory - Middleware used to process the rpc messages. + * The middlewareFactory needs to be a function that creates a pair of + * transform streams that convert `Uint8Array` to `JSONRPCRequest` on the forward + * path and `JSONRPCResponse` to `Uint8Array` on the reverse path. + * @param obj.streamKeepAliveTimeoutTime - Time before a connection is cleaned up due to no activity. This is the + * value used if the handler doesn't specify its own timeout time. This timeout is advisory and only results in a + * signal sent to the handler. Stream is forced to end after the timeoutForceCloseTime. Defaults to 60,000 + * milliseconds. + * @param obj.timeoutForceCloseTime - Time before the stream is forced to end after the initial timeout time. + * The stream will be forced to close after this amount of time after the initial timeout. This is a grace period for + * the handler to handle timeout before it is forced to end. Defaults to 2,000 milliseconds. + * @param obj.logger + */ public constructor({ - manifest, - middlewareFactory, + middlewareFactory = middleware.defaultServerMiddlewareWrapper(), handlerTimeoutTime = Infinity, logger, idGen = () => Promise.resolve(null), - fromError = rpcUtils.fromError, - filterSensitive = rpcUtils.filterSensitive, + fromError = utils.fromError, + filterSensitive = utils.filterSensitive, }: { - manifest: ServerManifest; - - middlewareFactory: MiddlewareFactory< + middlewareFactory?: MiddlewareFactory< JSONRPCRequest, Uint8Array, Uint8Array, JSONRPCResponseResult >; handlerTimeoutTime?: number; - logger: Logger; - idGen: IdGen; - fromError?: (error: ErrorRPC) => JSONValue; + logger?: Logger; + idGen?: IdGen; + fromError?: (error: errors.ErrorRPC) => JSONValue; filterSensitive?: (key: string, value: any) => any; }) { - super(); + this.idGen = idGen; + this.middlewareFactory = middlewareFactory; + this.handlerTimeoutTime = handlerTimeoutTime; + this.fromError = fromError ?? utils.fromError; + this.filterSensitive = filterSensitive ?? utils.filterSensitive; + this.logger = logger ?? new Logger(this.constructor.name); + } + + /** + * Starts RPC server. + + * @param obj + * @param obj.manifest - Server manifest used to define the rpc method handlers. + */ + public async start({ + manifest, + }: { + manifest: ServerManifest; + }): Promise { + this.logger.info(`Start ${this.constructor.name}`); for (const [key, manifestItem] of Object.entries(manifest)) { if (manifestItem instanceof RawHandler) { this.registerRawStreamHandler( @@ -199,37 +177,39 @@ class RPCServer extends EventTarget { ); continue; } - never(); + utils.never(); } - this.idGen = idGen; - this.middlewareFactory = middlewareFactory; - this.handlerTimeoutTime = handlerTimeoutTime; - this.logger = logger; - this.fromError = fromError || rpcUtils.fromError; - this.filterSensitive = filterSensitive || rpcUtils.filterSensitive; + this.logger.info(`Started ${this.constructor.name}`); } public async stop({ force = true, - reason = '', + reason = new errors.ErrorRPCStopping('RPCServer is stopping'), }: { force?: boolean; - reason?: string; + reason?: any; }): Promise { // Log an event before starting the destruction - this.logger.info(`Stopping ${this.constructor.name}`); + this.logger.info(`Stop ${this.constructor.name}`); // Your existing logic for stopping active streams and other cleanup + const handlerPs = new Array>(); if (force) { for await (const [activeStream] of this.activeStreams.entries()) { - activeStream.cancel(new rpcErrors.ErrorRPCStopping()); + if (force) activeStream.cancel(new errors.ErrorRPCStopping()); + handlerPs.push(activeStream); } + await Promise.all(handlerPs); } for await (const [activeStream] of this.activeStreams.entries()) { await activeStream; } + // Removes handlers and default timeouts registered in `RPCServer.start()` + this.handlerMap.clear(); + this.defaultTimeoutMap.clear(); + // Log an event after the destruction has been completed this.logger.info(`Stopped ${this.constructor.name}`); } @@ -340,10 +320,9 @@ class RPCServer extends EventTarget { controller.enqueue(value); } catch (e) { const rpcError: JSONRPCError = { - code: e.exitCode ?? JSONRPCErrorCode.InternalError, + code: e.exitCode ?? errors.JSONRPCErrorCode.InternalError, message: e.description ?? '', data: JSON.stringify(this.fromError(e), this.filterSensitive), - type: e.type, }; const rpcErrorMessage: JSONRPCResponseError = { jsonrpc: '2.0', @@ -354,7 +333,7 @@ class RPCServer extends EventTarget { // Clean up the input stream here, ignore error if already ended await forwardStream .cancel( - new rpcErrors.ErrorRPCHandlerFailed('Error clean up', { + new errors.ErrorRPCHandlerFailed('Error clean up', { cause: e, }), ) @@ -364,8 +343,8 @@ class RPCServer extends EventTarget { }, cancel: async (reason) => { this.dispatchEvent( - new rpcEvents.RPCErrorEvent({ - detail: new rpcErrors.ErrorRPCStreamEnded( + new events.RPCErrorEvent({ + detail: new errors.ErrorRPCStreamEnded( 'Stream has been cancelled', { cause: reason, @@ -453,6 +432,7 @@ class RPCServer extends EventTarget { /** * ID is associated with the stream, not individual messages. */ + @startStop.ready(new errors.ErrorRPCServerNotRunning()) public handleStream(rpcStream: RPCStream) { // This will take a buffer stream of json messages and set up service // handling for it. @@ -462,7 +442,7 @@ class RPCServer extends EventTarget { const timer = new Timer({ delay: this.handlerTimeoutTime, handler: () => { - abortController.abort(new rpcErrors.ErrorRPCTimedOut()); + abortController.abort(new errors.ErrorRPCTimedOut()); if (this.onTimeoutCallback) { this.onTimeoutCallback(); } @@ -471,8 +451,8 @@ class RPCServer extends EventTarget { const prom = (async () => { const id = await this.idGen(); - const headTransformStream = rpcUtilsMiddleware.binaryToJsonMessageStream( - rpcUtils.parseJSONRPCRequest, + const headTransformStream = middleware.binaryToJsonMessageStream( + utils.parseJSONRPCRequest, ); // Transparent transform used as a point to cancel the input stream from const passthroughTransform = new TransformStream< @@ -515,7 +495,7 @@ class RPCServer extends EventTarget { ), ]); } catch (e) { - const newErr = new rpcErrors.ErrorRPCHandlerFailed( + const newErr = new errors.ErrorRPCHandlerFailed( 'Stream failed waiting for header', { cause: e }, ); @@ -523,13 +503,8 @@ class RPCServer extends EventTarget { timer.cancel(cleanupReason); await timer.catch(() => {}); this.dispatchEvent( - new rpcEvents.RPCErrorEvent({ - detail: new rpcErrors.ErrorRPCOutputStreamError( - 'Stream failed waiting for header', - { - cause: newErr, - }, - ), + new events.RPCErrorEvent({ + detail: new errors.ErrorRPCOutputStreamError(), }), ); return; @@ -540,14 +515,14 @@ class RPCServer extends EventTarget { // 1. The timeout timer resolves before the first message // 2. the stream ends before the first message if (headerMessage == null) { - const newErr = new rpcErrors.ErrorRPCTimedOut( + const newErr = new errors.ErrorRPCTimedOut( 'Timed out waiting for header', - { cause: new rpcErrors.ErrorRPCStreamEnded() }, + { cause: new errors.ErrorRPCStreamEnded() }, ); await cleanUp(newErr); this.dispatchEvent( - new rpcEvents.RPCErrorEvent({ - detail: new rpcErrors.ErrorRPCTimedOut( + new events.RPCErrorEvent({ + detail: new errors.ErrorRPCTimedOut( 'Timed out waiting for header', { cause: newErr, @@ -558,13 +533,11 @@ class RPCServer extends EventTarget { return; } if (headerMessage.done) { - const newErr = new rpcErrors.ErrorMissingHeader('Missing header'); + const newErr = new errors.ErrorMissingHeader('Missing header'); await cleanUp(newErr); this.dispatchEvent( - new rpcEvents.RPCErrorEvent({ - detail: new rpcErrors.ErrorRPCOutputStreamError('Missing header', { - cause: newErr, - }), + new events.RPCErrorEvent({ + detail: new errors.ErrorRPCOutputStreamError(), }), ); return; @@ -572,13 +545,13 @@ class RPCServer extends EventTarget { const method = headerMessage.value.method; const handler = this.handlerMap.get(method); if (handler == null) { - await cleanUp(new rpcErrors.ErrorRPCHandlerFailed('Missing handler')); + await cleanUp(new errors.ErrorRPCHandlerFailed('Missing handler')); return; } if (abortController.signal.aborted) { await cleanUp( - new rpcErrors.ErrorHandlerAborted('Aborted', { - cause: new ErrorHandlerAborted(), + new errors.ErrorHandlerAborted('Aborted', { + cause: new errors.ErrorHandlerAborted(), }), ); return; @@ -604,10 +577,9 @@ class RPCServer extends EventTarget { ); } catch (e) { const rpcError: JSONRPCError = { - code: e.exitCode ?? JSONRPCErrorCode.InternalError, + code: e.exitCode ?? errors.JSONRPCErrorCode.InternalError, message: e.description ?? '', data: JSON.stringify(this.fromError(e), this.filterSensitive), - type: e.type, }; const rpcErrorMessage: JSONRPCResponseError = { jsonrpc: '2.0', @@ -640,7 +612,7 @@ class RPCServer extends EventTarget { this.logger.info(`Handled stream with method (${method})`); // Cleaning up abort and timer timer.cancel(cleanupReason); - abortController.abort(new rpcErrors.ErrorRPCStreamEnded()); + abortController.abort(new errors.ErrorRPCStreamEnded()); })(); const handlerProm = PromiseCancellable.from(prom, abortController).finally( () => this.activeStreams.delete(handlerProm), diff --git a/src/errors.ts b/src/errors.ts new file mode 100644 index 0000000..f4c8af0 --- /dev/null +++ b/src/errors.ts @@ -0,0 +1,228 @@ +import type { Class } from '@matrixai/errors'; +import type { JSONValue } from '@/types'; +import { AbstractError } from '@matrixai/errors'; + +class ErrorRPC extends AbstractError { + static description = 'RPC Error'; +} + +// Server Errors + +class ErrorRPCServer extends ErrorRPC { + static description = 'RPCServer error'; +} + +class ErrorRPCServerNotRunning extends ErrorRPC { + static description = 'RPCServer is not running'; +} + +// Protocol Errors + +const enum JSONRPCErrorCode { + ParseError = -32700, + InvalidRequest = -32600, + MethodNotFound = -32601, + InvalidParams = -32602, + InternalError = -32603, + HandlerNotFound = -32000, + RPCStopping = -32001, + RPCMessageLength = -32003, + RPCMissingResponse = -32004, + RPCOutputStreamError = -32005, + RPCRemote = -32006, + RPCStreamEnded = -32007, + RPCTimedOut = -32008, + RPCConnectionLocal = -32010, + RPCConnectionPeer = -32011, + RPCConnectionKeepAliveTimeOut = -32012, + RPCConnectionInternal = -32013, + MissingHeader = -32014, + HandlerAborted = -32015, + MissingCaller = -32016, +} + +abstract class ErrorRPCProtocol extends ErrorRPC { + static error = 'RPC Protocol Error'; + code: number; + type: string; +} + +class ErrorRPCParse extends ErrorRPCProtocol { + static description = 'Failed to parse Buffer stream'; + code = JSONRPCErrorCode.ParseError; +} + +class ErrorRPCStopping extends ErrorRPCProtocol { + static description = 'RPC is stopping'; + code = JSONRPCErrorCode.RPCStopping; +} + +/** + * This is an internal error, it should not reach the top level. + */ +class ErrorRPCHandlerFailed extends ErrorRPCProtocol { + static description = 'Failed to handle stream'; + code = JSONRPCErrorCode.HandlerNotFound; +} + +class ErrorRPCCallerFailed extends ErrorRPCProtocol { + static description = 'Failed to call stream'; + code = JSONRPCErrorCode.MissingCaller; +} + +class ErrorMissingCaller extends ErrorRPCProtocol { + static description = 'Caller is missing'; + code = JSONRPCErrorCode.MissingCaller; +} +class ErrorMissingHeader extends ErrorRPCProtocol { + static description = 'Header information is missing'; + code = JSONRPCErrorCode.MissingHeader; +} + +class ErrorHandlerAborted extends ErrorRPCProtocol { + static description = 'Handler Aborted Stream'; + code = JSONRPCErrorCode.HandlerAborted; +} + +class ErrorRPCMessageLength extends ErrorRPCProtocol { + static description = 'RPC Message exceeds maximum size'; + code = JSONRPCErrorCode.RPCMessageLength; +} + +class ErrorRPCMissingResponse extends ErrorRPCProtocol { + static description = 'Stream ended before response'; + code = JSONRPCErrorCode.RPCMissingResponse; +} + +class ErrorRPCOutputStreamError extends ErrorRPCProtocol { + static description = 'Output stream failed, unable to send data'; + code = JSONRPCErrorCode.RPCOutputStreamError; +} + +class ErrorRPCRemote extends ErrorRPCProtocol { + static description = 'Remote error from RPC call'; + static message: string = 'The server responded with an error'; + metadata: JSONValue | undefined; + + constructor({ + metadata, + message, + options, + }: { + metadata?: JSONValue; + message?: string; + options?: any; + } = {}) { + super(message, options); + this.metadata = metadata; + this.code = JSONRPCErrorCode.RPCRemote; + this.data = options?.data; + this.type = this.constructor.name; + this.message = message || ErrorRPCRemote.message; + } + + public static fromJSON>( + this: T, + json: any, + ): InstanceType { + if ( + typeof json !== 'object' || + json.type !== this.name || + typeof json.data !== 'object' || + typeof json.data.message !== 'string' || + isNaN(Date.parse(json.data.timestamp)) || + typeof json.data.metadata !== 'object' || + typeof json.data.data !== 'object' || + ('stack' in json.data && typeof json.data.stack !== 'string') + ) { + throw new TypeError(`Cannot decode JSON to ${this.name}`); + } + + // Here, you can define your own metadata object, or just use the one from JSON directly. + const parsedMetadata = json.data.metadata; + + const e = new this(parsedMetadata, json.data.message, { + timestamp: new Date(json.data.timestamp), + data: json.data.data, + cause: json.data.cause, + }); + e.stack = json.data.stack; + return e; + } + public toJSON(): any { + return { + type: this.name, + data: { + description: this.description, + }, + }; + } +} + +class ErrorRPCStreamEnded extends ErrorRPCProtocol { + static description = 'Handled stream has ended'; + code = JSONRPCErrorCode.RPCStreamEnded; +} + +class ErrorRPCTimedOut extends ErrorRPCProtocol { + static description = 'RPC handler has timed out'; + code = JSONRPCErrorCode.RPCTimedOut; +} + +class ErrorUtilsUndefinedBehaviour extends ErrorRPCProtocol { + static description = 'You should never see this error'; + code = JSONRPCErrorCode.MethodNotFound; +} + +class ErrorRPCMethodNotImplemented extends ErrorRPCProtocol { + static description = + 'This abstract method must be implemented in a derived class'; + code = JSONRPCErrorCode.MethodNotFound; +} + +class ErrorRPCConnectionLocal extends ErrorRPCProtocol { + static description = 'RPC Connection local error'; + code = JSONRPCErrorCode.RPCConnectionLocal; +} + +class ErrorRPCConnectionPeer extends ErrorRPCProtocol { + static description = 'RPC Connection peer error'; + code = JSONRPCErrorCode.RPCConnectionPeer; +} + +class ErrorRPCConnectionKeepAliveTimeOut extends ErrorRPCProtocol { + static description = 'RPC Connection keep alive timeout'; + code = JSONRPCErrorCode.RPCConnectionKeepAliveTimeOut; +} + +class ErrorRPCConnectionInternal extends ErrorRPCProtocol { + static description = 'RPC Connection internal error'; + code = JSONRPCErrorCode.RPCConnectionInternal; +} + +export { + ErrorRPC, + ErrorRPCServer, + ErrorRPCServerNotRunning, + ErrorRPCProtocol, + ErrorRPCStopping, + ErrorRPCParse, + ErrorRPCHandlerFailed, + ErrorRPCMessageLength, + ErrorRPCMissingResponse, + ErrorRPCOutputStreamError, + ErrorRPCRemote, + ErrorRPCStreamEnded, + ErrorRPCTimedOut, + ErrorUtilsUndefinedBehaviour, + ErrorRPCMethodNotImplemented, + ErrorRPCConnectionLocal, + ErrorRPCConnectionPeer, + ErrorRPCConnectionKeepAliveTimeOut, + ErrorRPCConnectionInternal, + ErrorMissingHeader, + ErrorHandlerAborted, + ErrorRPCCallerFailed, + ErrorMissingCaller, + JSONRPCErrorCode, +}; diff --git a/src/errors/errors.ts b/src/errors/errors.ts deleted file mode 100644 index 4532a17..0000000 --- a/src/errors/errors.ts +++ /dev/null @@ -1,284 +0,0 @@ -import type { Class } from '@matrixai/errors'; -import type { JSONValue } from '@/types'; -import { AbstractError } from '@matrixai/errors'; - -const enum JSONRPCErrorCode { - ParseError = -32700, - InvalidRequest = -32600, - MethodNotFound = -32601, - InvalidParams = -32602, - InternalError = -32603, - HandlerNotFound = -32000, - RPCStopping = -32001, - RPCDestroyed = -32002, - RPCMessageLength = -32003, - RPCMissingResponse = -32004, - RPCOutputStreamError = -32005, - RPCRemote = -32006, - RPCStreamEnded = -32007, - RPCTimedOut = -32008, - RPCConnectionLocal = -32010, - RPCConnectionPeer = -32011, - RPCConnectionKeepAliveTimeOut = -32012, - RPCConnectionInternal = -32013, - MissingHeader = -32014, - HandlerAborted = -32015, - MissingCaller = -32016, -} -interface RPCError extends Error { - code: number; -} -class ErrorRPC extends AbstractError implements RPCError { - private _description: string = 'Generic Error'; - type: string; - constructor(message?: string) { - super(message); - this.type = this.constructor.name; - } - code: number; - - get description(): string { - return this._description; - } - - set description(value: string) { - this._description = value; - } -} - -class ErrorRPCDestroyed extends ErrorRPC { - constructor(message?: string) { - super(message); // Call the parent constructor - this.description = 'Rpc is destroyed'; // Set the specific description - this.code = JSONRPCErrorCode.MethodNotFound; - this.type = this.constructor.name; - } -} - -class ErrorRPCParse extends ErrorRPC { - static description = 'Failed to parse Buffer stream'; - - constructor(message?: string, options?: { cause: Error }) { - super(message); // Call the parent constructor - this.description = 'Failed to parse Buffer stream'; // Set the specific description - this.code = JSONRPCErrorCode.ParseError; - this.type = this.constructor.name; - } -} - -class ErrorRPCStopping extends ErrorRPC { - constructor(message?: string) { - super(message); // Call the parent constructor - this.description = 'Rpc is stopping'; // Set the specific description - this.code = JSONRPCErrorCode.RPCStopping; - this.type = this.constructor.name; - } -} - -/** - * This is an internal error, it should not reach the top level. - */ -class ErrorRPCHandlerFailed extends ErrorRPC { - constructor(message?: string, options?: { cause: Error }) { - super(message); // Call the parent constructor - this.description = 'Failed to handle stream'; // Set the specific description - this.code = JSONRPCErrorCode.HandlerNotFound; - this.type = this.constructor.name; - } -} -class ErrorRPCCallerFailed extends ErrorRPC { - constructor(message?: string, options?: { cause: Error }) { - super(message); // Call the parent constructor - this.description = 'Failed to call stream'; // Set the specific description - this.code = JSONRPCErrorCode.MissingCaller; - this.type = this.constructor.name; - } -} -class ErrorMissingCaller extends ErrorRPC { - constructor(message?: string, options?: { cause: Error }) { - super(message); // Call the parent constructor - this.description = 'Header information is missing'; // Set the specific description - this.code = JSONRPCErrorCode.MissingCaller; - this.type = this.constructor.name; - } -} -class ErrorMissingHeader extends ErrorRPC { - constructor(message?: string, options?: { cause: Error }) { - super(message); // Call the parent constructor - this.description = 'Header information is missing'; // Set the specific description - this.code = JSONRPCErrorCode.MissingHeader; - this.type = this.constructor.name; - } -} - -class ErrorHandlerAborted extends ErrorRPC { - constructor(message?: string, options?: { cause: Error }) { - super(message); // Call the parent constructor - this.description = 'Handler Aborted Stream.'; // Set the specific description - this.code = JSONRPCErrorCode.HandlerAborted; - this.type = this.constructor.name; - } -} -class ErrorRPCMessageLength extends ErrorRPC { - static description = 'RPC Message exceeds maximum size'; - code = JSONRPCErrorCode.RPCMessageLength; -} - -class ErrorRPCMissingResponse extends ErrorRPC { - constructor(message?: string) { - super(message); - this.description = 'Stream ended before response'; - this.code = JSONRPCErrorCode.RPCMissingResponse; - this.type = this.constructor.name; - } -} - -interface ErrorRPCOutputStreamErrorOptions { - cause?: Error; -} -class ErrorRPCOutputStreamError extends ErrorRPC { - constructor(message: string, options: ErrorRPCOutputStreamErrorOptions) { - super(message); - this.description = 'Output stream failed, unable to send data'; - this.code = JSONRPCErrorCode.RPCOutputStreamError; - this.type = this.constructor.name; - } -} - -class ErrorRPCRemote extends ErrorRPC { - static description = 'Remote error from RPC call'; - static message: string = 'The server responded with an error'; - metadata: JSONValue | undefined; - - constructor(metadata?: JSONValue, message?: string, options?) { - super(message); - this.metadata = metadata; - this.code = JSONRPCErrorCode.RPCRemote; - this.data = options?.data; - this.type = this.constructor.name; - this.message = message || ErrorRPCRemote.message; - } - - public static fromJSON>( - this: T, - json: any, - ): InstanceType { - if ( - typeof json !== 'object' || - json.type !== this.name || - typeof json.data !== 'object' || - typeof json.data.message !== 'string' || - isNaN(Date.parse(json.data.timestamp)) || - typeof json.data.metadata !== 'object' || - typeof json.data.data !== 'object' || - ('stack' in json.data && typeof json.data.stack !== 'string') - ) { - throw new TypeError(`Cannot decode JSON to ${this.name}`); - } - - // Here, you can define your own metadata object, or just use the one from JSON directly. - const parsedMetadata = json.data.metadata; - - const e = new this(parsedMetadata, json.data.message, { - timestamp: new Date(json.data.timestamp), - data: json.data.data, - cause: json.data.cause, - }); - e.stack = json.data.stack; - return e; - } - public toJSON(): any { - return { - type: this.name, - data: { - description: this.description, - }, - }; - } -} - -class ErrorRPCStreamEnded extends ErrorRPC { - constructor(message?: string, options?: { cause: Error }) { - super(message); - this.description = 'Handled stream has ended'; - this.code = JSONRPCErrorCode.RPCStreamEnded; - this.type = this.constructor.name; - } -} - -class ErrorRPCTimedOut extends ErrorRPC { - constructor(message?: string, options?: { cause: Error }) { - super(message); - this.description = 'RPC handler has timed out'; - this.code = JSONRPCErrorCode.RPCTimedOut; - this.type = this.constructor.name; - } -} - -class ErrorUtilsUndefinedBehaviour extends ErrorRPC { - constructor(message?: string) { - super(message); - this.description = 'You should never see this error'; - this.code = JSONRPCErrorCode.MethodNotFound; - this.type = this.constructor.name; - } -} -export function never(): never { - throw new ErrorRPC('This function should never be called'); -} - -class ErrorRPCMethodNotImplemented extends ErrorRPC { - constructor(message?: string) { - super(message || 'This method must be overridden'); // Default message if none provided - this.name = 'ErrorRPCMethodNotImplemented'; - this.description = - 'This abstract method must be implemented in a derived class'; - this.code = JSONRPCErrorCode.MethodNotFound; - this.type = this.constructor.name; - } -} - -class ErrorRPCConnectionLocal extends ErrorRPC { - static description = 'RPC Connection local error'; - code = JSONRPCErrorCode.RPCConnectionLocal; -} - -class ErrorRPCConnectionPeer extends ErrorRPC { - static description = 'RPC Connection peer error'; - code = JSONRPCErrorCode.RPCConnectionPeer; -} - -class ErrorRPCConnectionKeepAliveTimeOut extends ErrorRPC { - static description = 'RPC Connection keep alive timeout'; - code = JSONRPCErrorCode.RPCConnectionKeepAliveTimeOut; -} - -class ErrorRPCConnectionInternal extends ErrorRPC { - static description = 'RPC Connection internal error'; - code = JSONRPCErrorCode.RPCConnectionInternal; -} - -export { - ErrorRPC, - ErrorRPCDestroyed, - ErrorRPCStopping, - ErrorRPCParse, - ErrorRPCHandlerFailed, - ErrorRPCMessageLength, - ErrorRPCMissingResponse, - ErrorRPCOutputStreamError, - ErrorRPCRemote, - ErrorRPCStreamEnded, - ErrorRPCTimedOut, - ErrorUtilsUndefinedBehaviour, - ErrorRPCMethodNotImplemented, - ErrorRPCConnectionLocal, - ErrorRPCConnectionPeer, - ErrorRPCConnectionKeepAliveTimeOut, - ErrorRPCConnectionInternal, - ErrorMissingHeader, - ErrorHandlerAborted, - ErrorRPCCallerFailed, - ErrorMissingCaller, - JSONRPCErrorCode, -}; diff --git a/src/errors/index.ts b/src/errors/index.ts deleted file mode 100644 index f72bc43..0000000 --- a/src/errors/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './errors'; diff --git a/src/events.ts b/src/events.ts index 5cecf46..ceb5abb 100644 --- a/src/events.ts +++ b/src/events.ts @@ -1,5 +1,4 @@ import type RPCServer from './RPCServer'; -import type RPCClient from './RPCClient'; import type { ErrorRPCConnectionLocal, ErrorRPCConnectionPeer, @@ -7,9 +6,6 @@ import type { ErrorRPCConnectionInternal, } from './errors'; import { AbstractEvent } from '@matrixai/events'; -import * as rpcErrors from './errors'; - -abstract class EventRPC extends AbstractEvent {} abstract class EventRPCClient extends AbstractEvent {} @@ -17,23 +13,6 @@ abstract class EventRPCServer extends AbstractEvent {} abstract class EventRPCConnection extends AbstractEvent {} -// Client events -class EventRPCClientDestroy extends EventRPCClient {} - -class EventRPCClientDestroyed extends EventRPCClient {} - -class EventRPCClientCreate extends EventRPCClient {} - -class EventRPCClientCreated extends EventRPCClient {} - -class EventRPCClientError extends EventRPCClient {} - -class EventRPCClientConnect extends EventRPCClient {} - -// Server events - -class EventRPCServerConnection extends EventRPCServer {} - class EventRPCServerStart extends EventRPCServer {} class EventRPCServerStarted extends EventRPCServer {} @@ -65,17 +44,9 @@ class RPCErrorEvent extends Event { export { RPCErrorEvent, - EventRPC, EventRPCClient, EventRPCServer, EventRPCConnection, - EventRPCClientDestroy, - EventRPCClientDestroyed, - EventRPCClientCreate, - EventRPCClientCreated, - EventRPCClientError, - EventRPCClientConnect, - EventRPCServerConnection, EventRPCServerError, EventRPCConnectionError, EventRPCServerStopping, diff --git a/src/index.ts b/src/index.ts index df22440..44e076d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,9 @@ export { default as RPCClient } from './RPCClient'; export { default as RPCServer } from './RPCServer'; export * as utils from './utils'; -export * as types from './types'; +export * from './types'; export * as errors from './errors'; export * as events from './events'; -export * as handlers from './handlers'; -export * as callers from './callers'; +export * from './handlers'; +export * from './callers'; export * as middleware from './middleware'; diff --git a/src/middleware.ts b/src/middleware.ts index 343b4a2..25c12af 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -7,8 +7,7 @@ import type { } from './types'; import { TransformStream } from 'stream/web'; import { JSONParser } from '@streamparser/json'; -import * as rpcUtils from './utils'; -import { promise } from './utils'; +import * as utils from './utils'; import * as rpcErrors from './errors'; /** @@ -34,7 +33,7 @@ function binaryToJsonMessageStream( return new TransformStream({ flush: async () => { // Avoid potential race conditions by allowing parser to end first - const waitP = promise(); + const waitP = utils.promise(); parser.onEnd = () => waitP.resolveP(); parser.end(); await waitP.p; @@ -108,7 +107,7 @@ function defaultServerMiddlewareWrapper( ): MiddlewareFactory { return (ctx, cancel, meta) => { const inputTransformStream = binaryToJsonMessageStream( - rpcUtils.parseJSONRPCRequest, + utils.parseJSONRPCRequest, parserBufferByteLimit, ); const outputTransformStream = new TransformStream< @@ -165,7 +164,7 @@ const defaultClientMiddlewareWrapper = ( > => { return (ctx, cancel, meta) => { const outputTransformStream = binaryToJsonMessageStream( - rpcUtils.parseJSONRPCResponse, + utils.parseJSONRPCResponse, parserBufferByteLimit, ); const inputTransformStream = new TransformStream< diff --git a/src/types.ts b/src/types.ts index c203f1a..7ed1295 100644 --- a/src/types.ts +++ b/src/types.ts @@ -7,8 +7,7 @@ import type { ServerCaller } from './callers'; import type { ClientCaller } from './callers'; import type { UnaryCaller } from './callers'; import type Handler from './handlers/Handler'; -import type { ErrorRPC } from '@/errors'; -import { ErrorRPCRemote } from '@/errors'; +import type { ErrorRPC } from './errors'; /** * This is the type for the IdGenFunction. It is used to generate the request @@ -132,8 +131,6 @@ type JSONRPCError = { * The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.). */ data?: JSONValue; - - type: string | ErrorRPC; }; /** diff --git a/src/utils.ts b/src/utils.ts index 2bb01ce..f3b5b51 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,9 +1,11 @@ +import type { Timer } from '@matrixai/timer'; import type { ClientManifest, HandlerType, JSONRPCError, JSONRPCMessage, JSONRPCRequest, + JSONValue, JSONRPCRequestMessage, JSONRPCRequestNotification, JSONRPCResponse, @@ -11,15 +13,31 @@ import type { JSONRPCResponseResult, PromiseDeconstructed, } from './types'; -import type { JSONValue, IdGen } from './types'; -import type { Timer } from '@matrixai/timer'; import { TransformStream } from 'stream/web'; import { JSONParser } from '@streamparser/json'; import { AbstractError } from '@matrixai/errors'; +import { JsonableValue } from 'ts-jest'; +import { + ErrorRPCRemote, + ErrorRPC, + ErrorRPCMethodNotImplemented, + ErrorRPCConnectionInternal, + JSONRPCErrorCode, + ErrorRPCStopping, + ErrorRPCMessageLength, + ErrorRPCParse, + ErrorRPCHandlerFailed, + ErrorRPCMissingResponse, + ErrorRPCOutputStreamError, + ErrorRPCTimedOut, + ErrorRPCStreamEnded, + ErrorRPCConnectionLocal, + ErrorRPCConnectionPeer, + ErrorRPCConnectionKeepAliveTimeOut, + ErrorMissingHeader, + ErrorMissingCaller, +} from './errors'; import * as rpcErrors from './errors'; -import * as errors from './errors'; -import { ErrorRPCRemote } from './errors'; -import { ErrorRPC } from './errors'; // Importing PK funcs and utils which are essential for RPC function isObject(o: unknown): o is object { @@ -222,23 +240,22 @@ function parseJSONRPCMessage( * @param {any} [id] - Optional id for the error object in the RPC response. * @returns {JSONValue} The serialized ErrorRPC instance. */ -function fromError(error: ErrorRPC, id?: any): JSONValue { - const data: { [key: string]: JSONValue } = { - errorCode: error.code, - message: error.message, - data: error.data, - type: error.constructor.name, - }; - return { - error: { - data, - }, +function fromError( + errorin: rpcErrors.ErrorRPCProtocol, + id?: any, +): JSONValue { + const error: { [key: string]: JSONValue } = { + errorCode: errorin.code, + message: errorin.message, + data: errorin.data, + type: errorin.constructor.name, }; + return error; } /** - * Error constructors for non-Polykey errors - * Allows these errors to be reconstructed from RPC metadata + * Error constructors for non-Polykey rpcErrors + * Allows these rpcErrors to be reconstructed from RPC metadata */ const standardErrors = { Error, @@ -265,7 +282,7 @@ const createReplacer = () => { } if (key !== 'code') { - if (value instanceof ErrorRPC) { + if (value instanceof rpcErrors.ErrorRPCProtocol) { return { code: value.code, message: value.message, @@ -295,6 +312,28 @@ const createReplacer = () => { */ const filterSensitive = createReplacer(); +const ErrorCodeToErrorType: { + [code: number]: new (...args: any[]) => ErrorRPC; +} = { + [JSONRPCErrorCode.RPCRemote]: ErrorRPCRemote, + [JSONRPCErrorCode.RPCStopping]: ErrorRPCStopping, + [JSONRPCErrorCode.RPCMessageLength]: ErrorRPCMessageLength, + [JSONRPCErrorCode.ParseError]: ErrorRPCParse, + [JSONRPCErrorCode.InvalidParams]: ErrorRPC, + [JSONRPCErrorCode.HandlerNotFound]: ErrorRPCHandlerFailed, + [JSONRPCErrorCode.RPCMissingResponse]: ErrorRPCMissingResponse, + [JSONRPCErrorCode.RPCOutputStreamError]: ErrorRPCOutputStreamError, + [JSONRPCErrorCode.RPCTimedOut]: ErrorRPCTimedOut, + [JSONRPCErrorCode.RPCStreamEnded]: ErrorRPCStreamEnded, + [JSONRPCErrorCode.RPCConnectionLocal]: ErrorRPCConnectionLocal, + [JSONRPCErrorCode.RPCConnectionPeer]: ErrorRPCConnectionPeer, + [JSONRPCErrorCode.RPCConnectionKeepAliveTimeOut]: + ErrorRPCConnectionKeepAliveTimeOut, + [JSONRPCErrorCode.RPCConnectionInternal]: ErrorRPCConnectionInternal, + [JSONRPCErrorCode.MissingHeader]: ErrorMissingHeader, + [JSONRPCErrorCode.HandlerAborted]: ErrorRPCHandlerFailed, + [JSONRPCErrorCode.MissingCaller]: ErrorMissingCaller, +}; /** * Deserializes an error response object into an ErrorRPCRemote instance. * @param {any} errorResponse - The error response object. @@ -302,24 +341,49 @@ const filterSensitive = createReplacer(); * @returns {ErrorRPCRemote} The deserialized ErrorRPCRemote instance. * @throws {TypeError} If the errorResponse object is invalid. */ -function toError(errorResponse: any, metadata?: any): ErrorRPCRemote { - if ( - typeof errorResponse !== 'object' || - errorResponse === null || - !('error' in errorResponse) - ) { - throw new ErrorRPCRemote(metadata); + +function toError(errorData: any, clientMetadata?: any): ErrorRPC { + // Parsing if it's a string + if (typeof errorData === 'string') { + try { + errorData = JSON.parse(errorData); + } catch (e) { + throw new ErrorRPCConnectionInternal('Unable to parse string to JSON'); + } } - const errorData = errorResponse.error; - const error = new ErrorRPCRemote(metadata, errorData.message, { - cause: errorData.cause, - data: errorData.data === undefined ? null : errorData.data, - }); - error.message = errorData.message; - error.description = errorData.description; - error.data = errorData.data; + // Check if errorData is an object and not null + if (typeof errorData !== 'object' || errorData === null) { + throw new ErrorRPCConnectionInternal( + 'errorData should be a non-null object', + ); + } + + // Define default error values, you can modify this as per your needs + let errorCode = -32006; + let message = 'Unknown error'; + let data = {}; + + // Check for errorCode and update if exists + if ('errorCode' in errorData) { + errorCode = errorData.errorCode; + } + + if ('message' in errorData) { + message = errorData.message; + } + if ('data' in errorData) { + data = errorData.data; + } + + // Map errorCode to a specific Error type + const ErrorType = ErrorCodeToErrorType[errorCode]; + if (!ErrorType) { + throw new ErrorRPC('Unknown Error Code'); // Handle unknown error codes + } + + const error = new ErrorType(message, { data, metadata: clientMetadata }); return error; } @@ -351,7 +415,7 @@ function clientInputTransformStream( /** * This constructs a transformation stream that converts any error messages - * into errors. It also refreshes a timer each time a message is processed if + * into rpcErrors. It also refreshes a timer each time a message is processed if * one is provided. * @param clientMetadata - Metadata that is attached to an error when one is * created. @@ -366,7 +430,7 @@ function clientOutputTransformStream( timer?.refresh(); // `error` indicates it's an error message if ('error' in chunk) { - throw toError(chunk.error.data, clientMetadata); + throw toError(chunk.error, clientMetadata); } controller.enqueue(chunk.result); }, @@ -451,6 +515,10 @@ function parseHeadStream( ); } +function never(): never { + throw new ErrorRPC('This function should never be called'); +} + export { parseJSONRPCRequest, parseJSONRPCRequestMessage, @@ -469,4 +537,5 @@ export { promise, isObject, sleep, + never, }; diff --git a/tests/RPC.test.ts b/tests/RPC.test.ts index 4724bf8..9cee06a 100644 --- a/tests/RPC.test.ts +++ b/tests/RPC.test.ts @@ -12,14 +12,7 @@ import ServerCaller from '@/callers/ServerCaller'; import ClientCaller from '@/callers/ClientCaller'; import UnaryCaller from '@/callers/UnaryCaller'; import * as rpcUtilsMiddleware from '@/middleware'; -import { - ErrorRPC, - ErrorRPCHandlerFailed, - ErrorRPCParse, - ErrorRPCRemote, - ErrorRPCTimedOut, - JSONRPCErrorCode, -} from '@/errors'; +import { ErrorRPCRemote } from '@/errors'; import * as rpcErrors from '@/errors'; import RPCClient from '@/RPCClient'; import RPCServer from '@/RPCServer'; @@ -29,8 +22,7 @@ import RawHandler from '@/handlers/RawHandler'; import ServerHandler from '@/handlers/ServerHandler'; import UnaryHandler from '@/handlers/UnaryHandler'; import ClientHandler from '@/handlers/ClientHandler'; -import { RPCStream } from '@/types'; -import { fromError, promise, filterSensitive, toError } from '@/utils'; +import { fromError, filterSensitive, toError } from '@/utils'; import * as rpcTestUtils from './utils'; describe('RPC', () => { @@ -62,19 +54,21 @@ describe('RPC', () => { }); }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {}, }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new RawCaller(), }, @@ -108,7 +102,6 @@ describe('RPC', () => { expect(await outputResult).toStrictEqual(values); await pipeProm; await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); test('RPC communication with raw stream times out waiting for leading message', async () => { @@ -122,7 +115,7 @@ describe('RPC', () => { } })(); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new RawCaller(), }, @@ -144,7 +137,6 @@ describe('RPC', () => { { timer: 100 }, ), ).rejects.toThrow(rpcErrors.ErrorRPCTimedOut); - await rpcClient.destroy(); }); test('RPC communication with raw stream, raw handler throws', async () => { const { clientPair, serverPair } = rpcTestUtils.createTapPairs< @@ -163,19 +155,21 @@ describe('RPC', () => { }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {}, }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new RawCaller(), }, @@ -196,7 +190,6 @@ describe('RPC', () => { ).rejects.toThrow(rpcErrors.ErrorRPCRemote); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }); testProp( 'RPC communication with duplex stream', @@ -216,19 +209,21 @@ describe('RPC', () => { yield* input; }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {}, }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new DuplexCaller(), }, @@ -254,7 +249,6 @@ describe('RPC', () => { expect(result.value).toBeUndefined(); expect(result.done).toBeTrue(); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); testProp( @@ -276,19 +270,21 @@ describe('RPC', () => { }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {}, }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new ServerCaller(), }, @@ -310,7 +306,6 @@ describe('RPC', () => { } expect(outputs.length).toEqual(value); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); testProp( @@ -334,19 +329,21 @@ describe('RPC', () => { }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {}, }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new ClientCaller(), }, @@ -369,7 +366,6 @@ describe('RPC', () => { const expectedResult = values.reduce((p, c) => p + c); await expect(output).resolves.toEqual(expectedResult); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); testProp( @@ -386,19 +382,21 @@ describe('RPC', () => { return input; }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {}, }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new UnaryCaller(), }, @@ -415,7 +413,6 @@ describe('RPC', () => { const result = await rpcClient.methods.testMethod(value); expect(result).toStrictEqual(value); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); testProp( @@ -441,16 +438,18 @@ describe('RPC', () => { }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {} }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new UnaryCaller(), }, @@ -473,7 +472,6 @@ describe('RPC', () => { // Cleanup await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); @@ -500,16 +498,18 @@ describe('RPC', () => { }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {} }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new UnaryCaller(), }, @@ -527,7 +527,6 @@ describe('RPC', () => { await expect(callProm).rejects.not.toHaveProperty('cause.stack'); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); @@ -562,20 +561,22 @@ describe('RPC', () => { }), }; }); - const rpcServer = await RPCServer.start({ - manifest: { - testMethod: new TestMethod({}), - }, + const rpcServer = new RPCServer({ middlewareFactory: middleware, logger, idGen, }); + await rpcServer.start({ + manifest: { + testMethod: new TestMethod({}), + }, + }); rpcServer.handleStream({ ...serverPair, cancel: () => {}, }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new DuplexCaller(), }, @@ -600,7 +601,6 @@ describe('RPC', () => { await expect(writer.closed).toReject(); await expect(reader.closed).toReject(); await expect(rpcServer.stop({ force: false })).toResolve(); - await rpcClient.destroy(); }); testProp( 'RPC client and server timeout concurrently', @@ -634,14 +634,16 @@ describe('RPC', () => { } const testMethodInstance = new TestMethod({}); // Set up a client and server with matching timeout settings - const rpcServer = await RPCServer.start({ - manifest: { - testMethod: testMethodInstance, - }, + const rpcServer = new RPCServer({ logger, idGen, handlerTimeoutTime: timeout, }); + await rpcServer.start({ + manifest: { + testMethod: testMethodInstance, + }, + }); // Register callback rpcServer.registerOnTimeoutCallback(() => { serverTimedOut = true; @@ -651,7 +653,7 @@ describe('RPC', () => { cancel: () => {}, }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new DuplexCaller(), }, @@ -691,7 +693,6 @@ describe('RPC', () => { ); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); // Test description @@ -725,12 +726,12 @@ describe('RPC', () => { } // Create an instance of the RPC server with a shorter timeout - const rpcServer = await RPCServer.start({ - manifest: { testMethod: new TestMethod({}) }, + const rpcServer = new RPCServer({ logger, idGen, handlerTimeoutTime: 1, }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}) } }); // Register callback rpcServer.registerOnTimeoutCallback(() => { serverTimedOut = true; @@ -738,7 +739,7 @@ describe('RPC', () => { rpcServer.handleStream({ ...serverPair, cancel: () => {} }); // Create an instance of the RPC client with a longer timeout - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new DuplexCaller() }, streamFactory: async () => ({ ...clientPair, cancel: () => {} }), logger, @@ -770,7 +771,6 @@ describe('RPC', () => { // Cleanup await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, { numRuns: 1 }, ); @@ -799,21 +799,23 @@ describe('RPC', () => { }; } // Set up a client and server with matching timeout settings - const rpcServer = await RPCServer.start({ - manifest: { - testMethod: new TestMethod({}), - }, + const rpcServer = new RPCServer({ logger, idGen, handlerTimeoutTime: 400, }); + await rpcServer.start({ + manifest: { + testMethod: new TestMethod({}), + }, + }); rpcServer.handleStream({ ...serverPair, cancel: () => {}, }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new DuplexCaller(), }, @@ -836,7 +838,6 @@ describe('RPC', () => { await expect(reader.read()).toReject(); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, { numRuns: 1 }, ); @@ -867,15 +868,15 @@ describe('RPC', () => { }; } - const rpcServer = await RPCServer.start({ - manifest: { testMethod: new TestMethod({}) }, + const rpcServer = new RPCServer({ logger, idGen, handlerTimeoutTime: Infinity, }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}) } }); rpcServer.handleStream({ ...serverPair, cancel: () => {} }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new DuplexCaller() }, streamFactory: async () => ({ ...clientPair, cancel: () => {} }), logger, @@ -922,7 +923,6 @@ describe('RPC', () => { // Expect neither to time out and verify that they can still handle other operations #TODO await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, { numRuns: 1 }, ); @@ -949,16 +949,18 @@ describe('RPC', () => { throw error; }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {} }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new UnaryCaller(), }, @@ -969,11 +971,11 @@ describe('RPC', () => { idGen, }); - const errorInstance = new ErrorRPCRemote( - { code: -32006 }, - 'Parse error', - { cause: error }, - ); + const errorInstance = new ErrorRPCRemote({ + metadata: -123123, + message: 'parse error', + options: { cause: 'Random cause' }, + }); const serializedError = fromError(errorInstance); const callProm = rpcClient.methods.testMethod(serializedError); @@ -988,7 +990,6 @@ describe('RPC', () => { expect(code).toBe(-32006); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); testProp( @@ -1013,16 +1014,18 @@ describe('RPC', () => { throw error; }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); rpcServer.handleStream({ ...serverPair, cancel: () => {} }); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { testMethod: new UnaryCaller(), }, @@ -1033,9 +1036,13 @@ describe('RPC', () => { idGen, }); - const errorInstance = new ErrorRPCRemote({ code: -32006 }, '', { - cause: error, - data: 'asda', + const errorInstance = new ErrorRPCRemote({ + metadata: -32006, + message: '', + options: { + cause: error, + data: 'asda', + }, }); const serializedError = JSON.parse( @@ -1055,7 +1062,59 @@ describe('RPC', () => { expect(data).toBe(undefined); await rpcServer.stop({ force: true }); - await rpcClient.destroy(); }, ); + test('RPCServer force stop will propagate correct errors', async () => { + const { clientPair, serverPair } = rpcTestUtils.createTapPairs< + Uint8Array, + Uint8Array + >(); + + const testReason = Error('test error'); + + class TestMethod extends UnaryHandler { + public handle = async ( + _input: JSONValue, + _cancel: (reason?: any) => void, + _meta: Record | undefined, + ctx: ContextTimed, + ): Promise => { + const abortP = utils.promise(); + ctx.signal.addEventListener( + 'abort', + () => abortP.resolveP(ctx.signal.reason), + { once: true }, + ); + throw await abortP.p; + }; + } + + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ + manifest: { + testMethod: new TestMethod({}), + }, + }); + rpcServer.handleStream({ ...serverPair, cancel: () => {} }); + + const rpcClient = new RPCClient({ + manifest: { + testMethod: new UnaryCaller(), + }, + streamFactory: async () => { + return { ...clientPair, cancel: () => {} }; + }, + logger, + idGen, + }); + + const testProm = rpcClient.methods.testMethod({}); + + await rpcServer.stop({ force: true, reason: testReason }); + + await expect(testProm).toReject(); + }); }); diff --git a/tests/RPCClient.test.ts b/tests/RPCClient.test.ts index a526cd1..c55c33f 100644 --- a/tests/RPCClient.test.ts +++ b/tests/RPCClient.test.ts @@ -21,7 +21,6 @@ import RPCServer from '@/RPCServer'; import * as rpcErrors from '@/errors'; import * as rpcUtilsMiddleware from '@/middleware'; import { promise, sleep } from '@/utils'; -import { ErrorRPCRemote } from '@/errors'; import * as rpcTestUtils from './utils'; describe(`${RPCClient.name}`, () => { @@ -68,7 +67,7 @@ describe(`${RPCClient.name}`, () => { }), writable: inputWritableStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, logger, @@ -108,7 +107,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, logger, @@ -137,7 +136,6 @@ describe(`${RPCClient.name}`, () => { JSON.parse(v.toString()), ); expect(outputMessages).toStrictEqual(expectedMessages); - await rpcClient.destroy(); }); testProp( 'generic server stream caller', @@ -151,7 +149,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, logger, @@ -175,7 +173,6 @@ describe(`${RPCClient.name}`, () => { params, }), ); - await rpcClient.destroy(); }, ); testProp( @@ -194,7 +191,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, logger, @@ -221,7 +218,6 @@ describe(`${RPCClient.name}`, () => { expect((await outputResult).map((v) => v.toString())).toStrictEqual( expectedOutput, ); - await rpcClient.destroy(); }, ); testProp( @@ -236,7 +232,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, logger, @@ -255,7 +251,6 @@ describe(`${RPCClient.name}`, () => { params: params, }), ); - await rpcClient.destroy(); }, ); testProp( @@ -276,7 +271,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, logger, @@ -294,7 +289,6 @@ describe(`${RPCClient.name}`, () => { })(); await expect(callProm).rejects.toThrow(rpcErrors.ErrorRPCRemote); await outputResult; - await rpcClient.destroy(); }, ); testProp( @@ -316,7 +310,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, logger, @@ -334,7 +328,6 @@ describe(`${RPCClient.name}`, () => { })(); await expect(callProm).rejects.toThrow(rpcErrors.ErrorRPCRemote); await outputResult; - await rpcClient.destroy(); }, ); testProp( @@ -359,7 +352,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, logger, @@ -377,7 +370,6 @@ describe(`${RPCClient.name}`, () => { })(); await expect(callProm).rejects.toThrow(rpcErrors.ErrorRPCRemote); await outputResult; - await rpcClient.destroy(); }, ); testProp( @@ -393,7 +385,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, middlewareFactory: rpcUtilsMiddleware.defaultClientMiddlewareWrapper( @@ -446,7 +438,6 @@ describe(`${RPCClient.name}`, () => { JSON.parse(v.toString()), ); expect(outputMessages).toStrictEqual(expectedMessages); - await rpcClient.destroy(); }, ); testProp( @@ -462,7 +453,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => streamPair, middlewareFactory: rpcUtilsMiddleware.defaultClientMiddlewareWrapper( @@ -501,7 +492,6 @@ describe(`${RPCClient.name}`, () => { await writer.write(value); } await outputResult; - await rpcClient.destroy(); }, ); testProp( @@ -517,7 +507,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { server: new ServerCaller(), }, @@ -540,7 +530,6 @@ describe(`${RPCClient.name}`, () => { params, }), ); - await rpcClient.destroy(); }, ); testProp( @@ -559,7 +548,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { client: new ClientCaller(), }, @@ -585,7 +574,6 @@ describe(`${RPCClient.name}`, () => { expect((await outputResult).map((v) => v.toString())).toStrictEqual( expectedOutput, ); - await rpcClient.destroy(); }, ); testProp( @@ -600,7 +588,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { unary: new UnaryCaller(), }, @@ -618,7 +606,6 @@ describe(`${RPCClient.name}`, () => { params: params, }), ); - await rpcClient.destroy(); }, ); testProp( @@ -652,7 +639,7 @@ describe(`${RPCClient.name}`, () => { }), writable: inputWritableStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { raw: new RawCaller(), }, @@ -699,7 +686,7 @@ describe(`${RPCClient.name}`, () => { readable: inputStream, writable: outputStream, }; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: { duplex: new DuplexCaller(), }, @@ -719,11 +706,10 @@ describe(`${RPCClient.name}`, () => { // We're just checking that it's consuming the messages as expected expect(result.length).toEqual(messages.length); expect(count).toEqual(messages.length); - await rpcClient.destroy(); }, ); test('manifest without handler errors', async () => { - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async () => { return {} as RPCStream; @@ -735,13 +721,12 @@ describe(`${RPCClient.name}`, () => { expect(() => rpcClient.methods.someMethod()).toThrow(); // @ts-ignore: ignoring type safety here expect(() => rpcClient.withMethods.someMethod()).toThrow(); - await rpcClient.destroy(); }); describe('raw caller', () => { test('raw caller uses default timeout when creating stream', async () => { const holdProm = promise(); let ctx: ContextTimed | undefined; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx_) => { ctx = ctx_; @@ -765,7 +750,7 @@ describe(`${RPCClient.name}`, () => { test('raw caller times out when creating stream', async () => { const holdProm = promise(); let ctx: ContextTimed | undefined; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx_) => { ctx = ctx_; @@ -792,7 +777,7 @@ describe(`${RPCClient.name}`, () => { test('raw caller handles abort when creating stream', async () => { const holdProm = promise(); const ctxProm = promise(); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx_) => { ctxProm.resolveP(ctx_); @@ -835,7 +820,7 @@ describe(`${RPCClient.name}`, () => { readable: reversePassThroughStream.readable, }; const ctxProm = promise(); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx_) => { ctxProm.resolveP(ctx_); @@ -872,7 +857,7 @@ describe(`${RPCClient.name}`, () => { readable: reversePassThroughStream.readable, }; const ctxProm = promise(); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx) => { ctxProm.resolveP(ctx); @@ -910,7 +895,7 @@ describe(`${RPCClient.name}`, () => { test('duplex caller uses default timeout when creating stream', async () => { const holdProm = promise(); let ctx: ContextTimed | undefined; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx_) => { ctx = ctx_; @@ -934,7 +919,7 @@ describe(`${RPCClient.name}`, () => { test('duplex caller times out when creating stream', async () => { const holdProm = promise(); let ctx: ContextTimed | undefined; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx_) => { ctx = ctx_; @@ -959,7 +944,7 @@ describe(`${RPCClient.name}`, () => { test('duplex caller handles abort when creating stream', async () => { const holdProm = promise(); let ctx: ContextTimed | undefined; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx_) => { ctx = ctx_; @@ -999,7 +984,7 @@ describe(`${RPCClient.name}`, () => { readable: reversePassThroughStream.readable, }; let ctx: ContextTimed | undefined; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx_) => { ctx = ctx_; @@ -1032,7 +1017,7 @@ describe(`${RPCClient.name}`, () => { readable: reversePassThroughStream.readable, }; let ctx: ContextTimed | undefined; - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx_) => { ctx = ctx_; @@ -1069,7 +1054,7 @@ describe(`${RPCClient.name}`, () => { readable: reversePassThroughStream.readable, }; const ctxProm = promise(); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx) => { ctxProm.resolveP(ctx); @@ -1109,7 +1094,7 @@ describe(`${RPCClient.name}`, () => { writable: outputStream, }; const ctxProm = promise(); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx) => { ctxProm.resolveP(ctx); @@ -1144,7 +1129,6 @@ describe(`${RPCClient.name}`, () => { await writer.close(); await outputResult; - await rpcClient.destroy(); }, { numRuns: 5 }, ); @@ -1162,7 +1146,7 @@ describe(`${RPCClient.name}`, () => { writable: outputStream, }; const ctxProm = promise(); - const rpcClient = await RPCClient.createRPCClient({ + const rpcClient = new RPCClient({ manifest: {}, streamFactory: async (ctx) => { ctxProm.resolveP(ctx); @@ -1193,7 +1177,6 @@ describe(`${RPCClient.name}`, () => { await writer.close(); await outputResult; - await rpcClient.destroy(); }, { numRuns: 1 }, ); diff --git a/tests/RPCServer.test.ts b/tests/RPCServer.test.ts index 4c4a296..ecb6c97 100644 --- a/tests/RPCServer.test.ts +++ b/tests/RPCServer.test.ts @@ -13,7 +13,7 @@ import { ReadableStream, TransformStream, WritableStream } from 'stream/web'; import { fc, testProp } from '@fast-check/jest'; import Logger, { LogLevel, StreamHandler } from '@matrixai/logger'; import RPCServer from '@/RPCServer'; -import * as rpcErrors from '@/errors/errors'; +import * as rpcErrors from '@/errors'; import * as rpcUtils from '@/utils'; import { promise, sleep } from '@/utils'; import * as rpcUtilsMiddleware from '@/middleware'; @@ -85,12 +85,14 @@ describe(`${RPCServer.name}`, () => { }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestHandler({}), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { @@ -122,12 +124,14 @@ describe(`${RPCServer.name}`, () => { } }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { @@ -159,12 +163,14 @@ describe(`${RPCServer.name}`, () => { return count; }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { @@ -191,12 +197,14 @@ describe(`${RPCServer.name}`, () => { } }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { @@ -219,12 +227,14 @@ describe(`${RPCServer.name}`, () => { return input; }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { @@ -261,12 +271,14 @@ describe(`${RPCServer.name}`, () => { }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod(container), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { @@ -305,12 +317,14 @@ describe(`${RPCServer.name}`, () => { } }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { @@ -340,12 +354,14 @@ describe(`${RPCServer.name}`, () => { } }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); @@ -393,12 +409,14 @@ describe(`${RPCServer.name}`, () => { } }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { @@ -421,12 +439,14 @@ describe(`${RPCServer.name}`, () => { throw error; }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); let resolve, reject; const errorProm = new Promise((resolve_, reject_) => { @@ -462,12 +482,14 @@ describe(`${RPCServer.name}`, () => { }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); let resolve, reject; const errorProm = new Promise((resolve_, reject_) => { @@ -508,12 +530,14 @@ describe(`${RPCServer.name}`, () => { } }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); let resolve; rpcServer.addEventListener('error', (thing: RPCErrorEvent) => { @@ -568,12 +592,14 @@ describe(`${RPCServer.name}`, () => { } }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestMethod({}), }, - logger, - idGen, }); let resolve; const errorProm = new Promise((resolve_) => { @@ -645,14 +671,16 @@ describe(`${RPCServer.name}`, () => { }; }, ); - const rpcServer = await RPCServer.start({ - manifest: { - testMethod: new TestMethod({}), - }, + const rpcServer = new RPCServer({ middlewareFactory: middlewareFactory, logger, idGen, }); + await rpcServer.start({ + manifest: { + testMethod: new TestMethod({}), + }, + }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { cancel: () => {}, @@ -695,14 +723,16 @@ describe(`${RPCServer.name}`, () => { }), }; }); - const rpcServer = await RPCServer.start({ - manifest: { - testMethod: new TestMethod({}), - }, + const rpcServer = new RPCServer({ middlewareFactory: middleware, logger, idGen, }); + await rpcServer.start({ + manifest: { + testMethod: new TestMethod({}), + }, + }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { cancel: () => {}, @@ -769,14 +799,16 @@ describe(`${RPCServer.name}`, () => { }; }, ); - const rpcServer = await RPCServer.start({ - manifest: { - testMethod: new TestMethod({}), - }, + const rpcServer = new RPCServer({ middlewareFactory: middleware, logger, idGen, }); + await rpcServer.start({ + manifest: { + testMethod: new TestMethod({}), + }, + }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { cancel: () => {}, @@ -795,7 +827,6 @@ describe(`${RPCServer.name}`, () => { error: { code: 1, message: 'failure of some kind', - type: 'ErrorRPCRemote', }, }; rpcServer.handleStream(readWriteStream); @@ -838,14 +869,16 @@ describe(`${RPCServer.name}`, () => { }; } - const rpcServer = await RPCServer.start({ - manifest: { - testMethod: new TestHandler({}), - }, + const rpcServer = new RPCServer({ handlerTimeoutTime: 100, logger, idGen, }); + await rpcServer.start({ + manifest: { + testMethod: new TestHandler({}), + }, + }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const stream = rpcTestUtils.messagesToReadableStream([ @@ -882,12 +915,14 @@ describe(`${RPCServer.name}`, () => { await rpcServer.stop({ force: true }); }); test('timeout with default time before handler selected', async () => { - const rpcServer = await RPCServer.start({ - manifest: {}, + const rpcServer = new RPCServer({ handlerTimeoutTime: 100, logger, idGen, }); + await rpcServer.start({ + manifest: {}, + }); const readWriteStream: RPCStream = { cancel: () => {}, readable: new ReadableStream({ @@ -939,14 +974,16 @@ describe(`${RPCServer.name}`, () => { return input; }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + handlerTimeoutTime: 50, + logger, + idGen, + }); + await rpcServer.start({ manifest: { testShort: new TestMethodShortTimeout({}), testLong: new TestMethodLongTimeout({}), }, - handlerTimeoutTime: 50, - logger, - idGen, }); const streamShort = rpcTestUtils.messagesToReadableStream([ { @@ -1007,14 +1044,16 @@ describe(`${RPCServer.name}`, () => { yield 2; }; } - const rpcServer = await RPCServer.start({ - manifest: { - testMethod: new TestHandler({}), - }, + const rpcServer = new RPCServer({ logger, idGen, handlerTimeoutTime: 1000, }); + await rpcServer.start({ + manifest: { + testMethod: new TestHandler({}), + }, + }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const requestMessage = Buffer.from( JSON.stringify({ @@ -1077,12 +1116,14 @@ describe(`${RPCServer.name}`, () => { }); }; } - const rpcServer = await RPCServer.start({ + const rpcServer = new RPCServer({ + logger, + idGen, + }); + await rpcServer.start({ manifest: { testMethod: new TestHandler({}), }, - logger, - idGen, }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const stream = rpcTestUtils.messagesToReadableStream([ @@ -1132,14 +1173,16 @@ describe(`${RPCServer.name}`, () => { reverse: new TransformStream(), }; }); - const rpcServer = await RPCServer.start({ - manifest: { - testMethod: new TestMethod({}), - }, + const rpcServer = new RPCServer({ middlewareFactory: middlewareFactory, logger, idGen, }); + await rpcServer.start({ + manifest: { + testMethod: new TestMethod({}), + }, + }); const [outputResult, outputStream] = rpcTestUtils.streamToArray(); const readWriteStream: RPCStream = { cancel: () => {},