json-rpc-engine
Advanced tools
Comparing version
{ | ||
"name": "json-rpc-engine", | ||
"version": "5.1.1", | ||
"version": "5.1.3", | ||
"description": "a tool for processing JSON RPC", | ||
"license": "ISC", | ||
"author": "kumavis", | ||
"main": "src/index.js", | ||
@@ -19,25 +21,13 @@ "types": "src/index.d.ts", | ||
}, | ||
"author": "kumavis", | ||
"license": "ISC", | ||
"dependencies": { | ||
"@babel/preset-env": "^7.3.4", | ||
"async": "^2.0.1", | ||
"babelify": "^10.0.0", | ||
"eth-json-rpc-errors": "^1.0.1", | ||
"promise-to-callback": "^1.0.0", | ||
"safe-event-emitter": "^1.0.1" | ||
}, | ||
"browserify": { | ||
"transform": [ | ||
[ | ||
"babelify", | ||
{ | ||
"presets": [ | ||
"@babel/preset-env" | ||
] | ||
} | ||
] | ||
] | ||
}, | ||
"devDependencies": { | ||
"aegir": "^18.2.1", | ||
"@babel/core": "^7.5.5", | ||
"@babel/preset-env": "^7.5.5", | ||
"aegir": "^20.0.0", | ||
"babelify": "^10.0.0", | ||
"browserify": "^16.2.3" | ||
@@ -44,0 +34,0 @@ }, |
@@ -78,1 +78,4 @@ # RpcEngine | ||
``` | ||
That said, `next()` will detect errors on the RPC response, and cause | ||
`end(res.error)` to be called. |
@@ -5,3 +5,2 @@ const promiseToCallback = require('promise-to-callback') | ||
function createAsyncMiddleware(asyncMiddleware) { | ||
@@ -8,0 +7,0 @@ return (req, res, next, end) => { |
@@ -0,1 +1,4 @@ | ||
import { IJsonRpcError } from 'eth-json-rpc-errors/@types' | ||
/** A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0". */ | ||
@@ -15,2 +18,4 @@ export type JsonRpcVersion = "2.0"; | ||
interface JsonRpcError<T> extends IJsonRpcError<T> {} | ||
interface JsonRpcRequest<T> { | ||
@@ -43,9 +48,2 @@ jsonrpc: JsonRpcVersion; | ||
interface JsonRpcError<T> { | ||
/** Must be an integer */ | ||
code: number; | ||
message: string; | ||
data?: T; | ||
} | ||
type JsonRpcEngineEndCallback = (error?: JsonRpcError<any>) => void; | ||
@@ -52,0 +50,0 @@ type JsonRpcEngineNextCallback = (returnFlightCallback?: (done: () => void) => void) => void; |
'use strict' | ||
const async = require('async') | ||
const SafeEventEmitter = require('safe-event-emitter') | ||
const { serializeError } = require('eth-json-rpc-errors') | ||
@@ -79,6 +80,2 @@ class RpcEngine extends SafeEventEmitter { | ||
} | ||
function runReturnHandlers (returnHandlers, cb) { | ||
async.eachSeries(returnHandlers, (handler, next) => handler(next), onDone) | ||
} | ||
} | ||
@@ -104,11 +101,18 @@ | ||
function next (returnHandler) { | ||
// add return handler | ||
allReturnHandlers.push(returnHandler) | ||
cb() | ||
if (res.error) { | ||
end(res.error) | ||
} else { | ||
// add return handler | ||
allReturnHandlers.push(returnHandler) | ||
cb() | ||
} | ||
} | ||
function end (err) { | ||
// if errored, set the error but dont pass to callback | ||
if (err) { | ||
res.error = serializeError(err) | ||
res._originalError = err | ||
const _err = err || (res && res.error) | ||
// const _err = err | ||
if (_err) { | ||
res.error = serializeError(_err) | ||
res._originalError = _err | ||
} | ||
@@ -127,2 +131,4 @@ // mark as completed | ||
res.error = serializeError(err) | ||
// remove result if present | ||
delete res.result | ||
// return error-first and res with err | ||
@@ -142,9 +148,2 @@ return onDone(err, res) | ||
function serializeError(err) { | ||
return { | ||
code: err.code || -32603, | ||
message: err.stack, | ||
} | ||
} | ||
module.exports = RpcEngine |
@@ -87,3 +87,3 @@ /* eslint-env mocha */ | ||
it('erroring middleware test', function (done) { | ||
it('erroring middleware test: end(error)', function (done) { | ||
let engine = new RpcEngine() | ||
@@ -101,2 +101,3 @@ | ||
assert(res.error, 'does have error on response') | ||
assert(!res.result, 'does not have result on response') | ||
done() | ||
@@ -106,2 +107,40 @@ }) | ||
it('erroring middleware test: res.error -> next()', function (done) { | ||
let engine = new RpcEngine() | ||
engine.push(function (req, res, next, end) { | ||
res.error = new Error('no bueno') | ||
next() | ||
}) | ||
let payload = { id: 1, jsonrpc: '2.0', method: 'hello' } | ||
engine.handle(payload, function (err, res) { | ||
assert(err, 'did error') | ||
assert(res, 'does have response') | ||
assert(res.error, 'does have error on response') | ||
assert(!res.result, 'does not have result on response') | ||
done() | ||
}) | ||
}) | ||
it('erroring middleware test: res.error -> end()', function (done) { | ||
let engine = new RpcEngine() | ||
engine.push(function (req, res, next, end) { | ||
res.error = new Error('no bueno') | ||
end() | ||
}) | ||
let payload = { id: 1, jsonrpc: '2.0', method: 'hello' } | ||
engine.handle(payload, function (err, res) { | ||
assert(err, 'did error') | ||
assert(res, 'does have response') | ||
assert(res.error, 'does have error on response') | ||
assert(!res.result, 'does not have result on response') | ||
done() | ||
}) | ||
}) | ||
it('empty middleware test', function (done) { | ||
@@ -241,3 +280,2 @@ let engine = new RpcEngine() | ||
}) | ||
}) |
32312
4.03%4
-20%18
12.5%890
3.13%81
3.85%5
150%+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed