Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/allain/jsonrpc-processor
Core of a JSON-RPC 2 engine I intend to expose over HTTP(s) and socket.io
https://github.com/allain/jsonrpc-processor
Last synced: 4 days ago
JSON representation
Core of a JSON-RPC 2 engine I intend to expose over HTTP(s) and socket.io
- Host: GitHub
- URL: https://github.com/allain/jsonrpc-processor
- Owner: allain
- License: mit
- Created: 2015-09-20T21:17:15.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-09-21T21:28:18.000Z (over 9 years ago)
- Last Synced: 2024-10-23T00:15:10.737Z (3 months ago)
- Language: JavaScript
- Size: 129 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# jsonrpc-processor
A tool for performing jsonrpc calls in a transport agnostic way. It exists, because the packages I was able to find
conflated the transport and the processing, or did not support asynchronous computation of the responses.It supports asynchronous responses by having them return promises or simple values.
Handles thrown exceptions and rejected promises by generating valid jsonrpc 2.0 errors.
As per the jsonrpc spec, notifications do not produce any responses for errors or otherwise.
## Installation
```bash
npm install jsonrpc-processor
```## Usage
```js
var process = require('jsonrpc-processor');// Define some methods for use later
var methods = {
echo: function(val) { return val; }
asyncEcho: function(val) { return Promise.resolve(val); },
dump: function(msg) { }
};// Single invocation:
process({jsonrpc: '2.0', method: 'echo', params: [1], id: 1}).then(function(result) {
console.log(result);
// outputs:
// {
// "jsonrpc": "2.0",
// "id": 1,
// "result": 1
// },
});// Single Notification (no id in request):
process({jsonrpc: '2.0', method: 'dump', params: ['hello']}).then(function(result) {
console.log(result);
// outputs empty array since notifications do not expect a response
// []
});// Array of invocations:
process([
{jsonrpc: '2.0', method: 'echo', params: [1], id: 1},
{jsonrpc: '2.0', method: 'asyncEcho', params: [2], id: 2},
]).then(function(result) {
console.log(result);
// outputs:
// [
// {
// "jsonrpc": "2.0",
// "id": 1,
// "result": 1
// },
// {
// "jsonrpc": "2.0",
// "id": 2,
// "result": 2
// }
// ]
});
```## API
### process(invocation, methods[, context]) => Promise
#### invocation
is one or more jsonrpc requests or notifications#### methods
an object where the keys are the method names and the values are the functions to invoke.#### context
object to bind `this` while invoking methods#### returns
a Promise which resolves into a Response object, undefined, or an array of Response objects for the case of a Single Request, a Notification, or an array of one or more Requests or notifications respectively.Note that nofications will not be found in the array since by definition the server must not respond at all, even in the case of an error.