NestJS JSON RPC package - nestjs-json-rpc npm package
Implemented JSON RPC specification
- Install
- Import module
- How to use simple handler
- How to use multiple handlers in one class
- Decorators description
- Samples
- Changelog
npm i --save @jashkasoft/nestjs-json-rpc
Import module RpcModule
from @jashkasoft/nestjs-json-rpc
, example
JsonRpcModule.forRoot({
path: '/rpc', // path to RPC
})
Create simple RPC handler
create RPC handler
import { RpcId, RpcPayload, RpcVersion, RpcMethod, IRpcHandler, RpcHandler } from '@jashkasoft/nestjs-json-rpc';
@RpcHandler({
method: 'test',
})
export class TestHandler implements IRpcHandler<Payload> {
public async invoke(
@RpcPayload() payload: Payload,
@RpcVersion() version: string,
@RpcId() id: number | string,
@RpcMethod() method: string
) {
return payload;
}
}
Add TestHandler
to providers array
Every request to RPC is POST method and response status = 200
Test with curl
curl -X POST "http://localhost:3000/rpc" -H "accept: application/json" -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "test", "id": 2}'
Create multiple RPC handler in one class
Create RPC class handler
import { RpcId, RpcPayload, RpcVersion, RpcMethod, RpcMethodHandler, RpcHandler } from '@jashkasoft/nestjs-json-rpc';
@RpcHandler({
method: 'contact',
})
export class ContactHandler {
@RpcMethodHandler('add')
public async add(
@RpcPayload() payload: Payload,
@RpcVersion() version: string,
@RpcId() id: number | string,
@RpcMethod() method: string
) {
return payload;
}
@RpcMethodHandler('delete')
public async delete(
@RpcPayload() payload: Payload,
@RpcVersion() version: string,
@RpcId() id: number | string,
@RpcMethod() method: string
) {
return payload;
}
}
Add ContactHandler
to providers array
Every request to RPC is POST method and response status = 200
Test with curl contact.add
curl -X POST "http://localhost:3000/rpc" -H "accept: application/json" -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "contact.add", "id": 2}'
Test with curl contact.delete
curl -X POST "http://localhost:3000/rpc" -H "accept: application/json" -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "contact.delete", "id": 2}'
field | decorator | description | required | other |
---|---|---|---|---|
params |
@RpcPayload() |
get payload ( params ) | false | use pipes... |
jsonrpc |
@RpcVersion() |
get rpc version | true | use pipes... |
method |
@RpcMethod() |
get rpc version | true | use pipes... |
id |
@RpcId() |
get client operation id | false | if not send - response not send, RPC notification. use pipes... |
See examples in samples folder
7.6.0
- NestJS 7.3.* ( breaking change )
- typescript 3.9.7 ( breaking change )
- use DiscoveryModule
7.5.0
- add multiple RPC handlers for class
- NestJS 7.2.*
7.4.0
- fix types for
JsonRpcModule
async options - export
JSON_RPC_OPTIONS
.
You can inject rpc config:
@Inject(JSON_RPC_OPTIONS) private config: JsonRpcConfig
7.3.2
- decrease bundle size
7.3.0
- allow response object
- add custom headers
7.2.0
- add injection scopes ( REQUEST / TRANSIENT ) to JSON RPC handlers
- add logging register handlers
- add injection scopes sample
7.1.1
- add express engine example
7.1.0
- add support fastify adapter
7.0.0
- support nestjs 7.0.0
- fix types
- add to decorators ExecutionContext ( breaking change )