🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

json-rpc-middleware-stream

Package Overview
Dependencies
Maintainers
7
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

json-rpc-middleware-stream - npm Package Compare versions

Comparing version

to
4.0.0

16

CHANGELOG.md
# Changelog
All notable changes to this project will be documented in this file.

@@ -10,9 +9,16 @@

## [4.0.0] - 2022-10-03
### Changed
- BREAKING: Add Node 12 as minimum required version [#15](https://github.com/MetaMask/json-rpc-middleware-stream/pull/15)
- Retry pending requests when notification to reconnect is received ([#27](https://github.com/MetaMask/json-rpc-middleware-stream/pull/27))
### Security
- Add `@lavamoat/allow-scripts` to make dependency install scripts opt-in ([#25](https://github.com/MetaMask/json-rpc-middleware-stream/pull/25))
## [3.0.0] - 2020-12-08
### Added
- TypeScript typings ([#11](https://github.com/MetaMask/json-rpc-middleware-stream/pull/11))
[Unreleased]:https://github.com/MetaMask/json-rpc-middleware-stream/compare/v3.0.0...HEAD
[3.0.0]:https://github.com/MetaMask/json-rpc-middleware-stream/compare/v2.1.1...v3.0.0
[Unreleased]: https://github.com/MetaMask/json-rpc-middleware-stream/compare/v4.0.0...HEAD
[4.0.0]: https://github.com/MetaMask/json-rpc-middleware-stream/compare/v3.0.0...v4.0.0
[3.0.0]: https://github.com/MetaMask/json-rpc-middleware-stream/releases/tag/v3.0.0

@@ -16,3 +16,3 @@ "use strict";

const { engine } = opts;
const stream = new readable_stream_1.Duplex({ objectMode: true, read, write });
const stream = new readable_stream_1.Duplex({ objectMode: true, read: () => undefined, write });
// forward notifications

@@ -25,5 +25,9 @@ if (engine.on) {

return stream;
function read() {
return undefined;
}
/**
* Write a JSON-RPC request to the stream.
*
* @param req - The JSON-rpc request.
* @param _encoding - The stream encoding, not used.
* @param cb - The stream write callback.
*/
function write(req, _encoding, cb) {

@@ -30,0 +34,0 @@ engine.handle(req, (_err, res) => {

import SafeEventEmitter from '@metamask/safe-event-emitter';
import { Duplex } from 'readable-stream';
import { JsonRpcMiddleware } from 'json-rpc-engine';
interface Options {
retryOnMessage?: string;
}
/**

@@ -10,5 +13,6 @@ * Creates a JsonRpcEngine middleware with an associated Duplex stream and

*
* @param options - Configuration options for middleware.
* @returns The event emitter, middleware, and stream.
*/
export default function createStreamMiddleware(): {
export default function createStreamMiddleware(options?: Options): {
events: SafeEventEmitter;

@@ -18,1 +22,2 @@ middleware: JsonRpcMiddleware<unknown, unknown>;

};
export {};

@@ -14,9 +14,10 @@ "use strict";

*
* @param options - Configuration options for middleware.
* @returns The event emitter, middleware, and stream.
*/
function createStreamMiddleware() {
const idMap = {};
function createStreamMiddleware(options = {}) {
const idMap = {}; // TODO: replace with actual Map
const stream = new readable_stream_1.Duplex({
objectMode: true,
read: readNoop,
read: () => undefined,
write: processMessage,

@@ -27,3 +28,3 @@ });

// write req to stream
stream.push(req);
sendToStream(req);
// register request on id map

@@ -33,7 +34,20 @@ idMap[req.id] = { req, res, next, end };

return { events, middleware, stream };
function readNoop() {
return false;
/**
* Forwards JSON-RPC request to the stream.
*
* @param req - The JSON-RPC request object.
*/
function sendToStream(req) {
// TODO: limiting retries could be implemented here
stream.push(req);
}
/**
* Writes a JSON-RPC object to the stream.
*
* @param res - The JSON-RPC response object.
* @param _encoding - The stream encoding, not used.
* @param cb - The stream write callback.
*/
function processMessage(res, _encoding, cb) {
let err;
let err = null;
try {

@@ -54,2 +68,7 @@ const isNotification = !res.id;

}
/**
* Processes a JSON-RPC response.
*
* @param res - The response to process.
*/
function processResponse(res) {

@@ -67,7 +86,24 @@ const context = idMap[res.id];

}
function processNotification(res) {
events.emit('notification', res);
/**
* Processes a JSON-RPC notification.
*
* @param notif - The notification to process.
*/
function processNotification(notif) {
if ((options === null || options === void 0 ? void 0 : options.retryOnMessage) && notif.method === options.retryOnMessage) {
retryStuckRequests();
}
events.emit('notification', notif);
}
/**
* Retry pending requests.
*/
function retryStuckRequests() {
Object.values(idMap).forEach(({ req }) => {
// TODO: limiting retries could be implemented here
sendToStream(req);
});
}
}
exports.default = createStreamMiddleware;
//# sourceMappingURL=createStreamMiddleware.js.map
{
"name": "json-rpc-middleware-stream",
"version": "3.0.0",
"version": "4.0.0",
"description": "A small toolset for streaming JSON-RPC data and matching requests and responses.",
"repository": {
"type": "git",
"url": "https://github.com/MetaMask/json-rpc-middleware-stream.git"
},
"license": "ISC",

@@ -11,7 +15,12 @@ "main": "dist/index.js",

"scripts": {
"build": "tsc --project .",
"test": "yarn build && node test/index.js",
"lint": "eslint . --ext ts,js,json",
"lint:fix": "eslint . --ext ts,js,json --fix",
"prepublishOnly": "yarn test"
"build": "tsc --project tsconfig.build.json",
"build:clean": "rimraf dist && yarn build",
"lint": "yarn lint:eslint && yarn lint:misc --check",
"lint:eslint": "eslint . --cache --ext js,ts",
"lint:fix": "yarn lint:eslint --fix && yarn lint:misc --write",
"lint:misc": "prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern",
"prepublishOnly": "yarn build:clean && yarn lint && yarn test",
"setup": "yarn install && yarn allow-scripts",
"test": "jest && jest-it-up",
"test:watch": "jest --watch"
},

@@ -23,22 +32,44 @@ "dependencies": {

"devDependencies": {
"@metamask/eslint-config": "^4.1.0",
"@lavamoat/allow-scripts": "^1.0.5",
"@metamask/auto-changelog": "^2.3.0",
"@metamask/eslint-config": "^9.0.0",
"@metamask/eslint-config-jest": "^9.0.0",
"@metamask/eslint-config-nodejs": "^9.0.0",
"@metamask/eslint-config-typescript": "^9.0.1",
"@types/jest": "^26.0.13",
"@types/node": "^17.0.23",
"@types/readable-stream": "^2.3.9",
"@typescript-eslint/eslint-plugin": "^4.9.0",
"@typescript-eslint/parser": "^4.9.0",
"eslint": "^7.14.0",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-json": "^2.1.1",
"@typescript-eslint/eslint-plugin": "^4.21.0",
"@typescript-eslint/parser": "^4.21.0",
"eslint": "^7.23.0",
"eslint-config-prettier": "^8.1.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jest": "^24.3.4",
"eslint-plugin-jsdoc": "^36.1.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.3.1",
"extension-port-stream": "^2.0.1",
"jest": "^27.5.1",
"jest-it-up": "^2.0.2",
"json-rpc-engine": "^6.1.0",
"tape": "^5.0.0",
"typescript": "^4.1.2"
"prettier": "^2.2.1",
"prettier-plugin-packagejson": "^2.2.17",
"rimraf": "^3.0.2",
"ts-jest": "^27.1.4",
"ts-node": "^10.7.0",
"typescript": "^4.2.4",
"webextension-polyfill-ts": "^0.26.0"
},
"repository": {
"type": "git",
"url": "git+https://github.com/MetaMask/json-rpc-middleware-stream.git"
"engines": {
"node": ">=14.0.0"
},
"bugs": {
"url": "https://github.com/MetaMask/json-rpc-middleware-stream/issues"
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"homepage": "https://github.com/MetaMask/json-rpc-middleware-stream#readme"
"lavamoat": {
"allowScripts": {
"@lavamoat/preinstall-always-fail": false
}
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet