
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
rpc2-websocket-client
Advanced tools

Fast JSON RPC 2.0 written in TypeScript.
TypeScript JSON RPC 2.0 WebSocket implementation with async-await Promises.
I really lacked typescript support or type definitions of rpc-websockets. I kept everything as simple as possible for best performance and in principle stay close to the metal. Under the hood id-generation for requests is done using uuid/v1 to provide id uniqueness as an additional feature.
Using npm:
npm i rpc2-websocket-client
Using CDN (on browsers)
<script src="https://cdn.jsdelivr.net/npm/rpc2-websocket-client/dist/rpc-websocket-client.umd.full.js"></script>
noRpc() method to prevent sending jsonrpc: '2.0' overhead from all messages if you'd like to ignore the JSON RPC 2.0 standard for better performance.changeSocket() and listenMessages() methods. Useful if you use REST or GraphQL implementation from another library and want to handle JSON RPC 2.0 when communicating from server to client (that was my use case to develop this package).// vite 使用'rpc-websocket-client.umd.full',解决require is not defined问题
// import {RpcWebSocketClient} from 'rpc2-websocket-client/dist/rpc-websocket-client.umd.full';
// vite.config.ts 增加以下配置
// export default {
// optimizeDeps: {
// include: ['rpc2-websocket-client/dist/rpc-websocket-client.umd.full']
// }
// };
import { RpcWebSocketClient } from 'rpc2-websocket-client';
(async () => {
const rpc = new RpcWebSocketClient();
await rpc.connect(`ws://localhost:4000/`);
// Connection is established now.
// Let's hope there will be no error or it will be catched in some wrapper.
await rpc.call(`auth.login`, [`rpcMaster`, `mySecretPassword`]);
// Now lets be pesimistic.
const res = await rpc.call(`auth.login`, [`rpcMaster`, `mySecretPassword`]).then(() => {
// Woohoo, user logged!
}).catch((err) => {
// Err is typeof RpcError (code: number, message: string, data?: any).
await rpc.call(`auth.signup`, {
login: `rpcMaster`,
password: `mySecretPassword`,
});
return false;
});
// If catch wrapper returned false, let's not continue.
if (res === false) {
return;
}
rpc.notify(`btw.iHateYou`, [`over and out`]);
// Close the connection by using native ws.close().
rpc.ws.close();
})();
import { RpcWebSocketClient } from 'rpc-websocket-client';
(async () => {
// lets say you use WebSocket implementation for GraphQL Client -> Server communication
// e.g. Apollo, and it's already connected
// but you want to handle some of the Server -> Client communication with RPC
const ws = (apollo as any).client.wsImpl;
const rpc = new RpcWebSocketClient();
rpc.onRequest.push((data) => { // data is typeof RpcRequest
// controller-like stuff
});
rpc.onNotification.push((data) => { // data is typeof RpcNotification
// notification handling
});
// here goes magic for listening to already-connected socket
rpc.changeSocket(ws);
rpc.listenMessages();
})();
FAQs
Fast JSON
We found that rpc2-websocket-client demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.