Home

Awesome

NestJS JSON RPC package - nestjs-json-rpc npm package

Build

Implemented JSON RPC specification

Contents

<a id="install"></a> Install

npm i --save @jashkasoft/nestjs-json-rpc

<a id="import-module"></a> Import module

Import module RpcModule from @jashkasoft/nestjs-json-rpc, example

        JsonRpcModule.forRoot({
            path: '/rpc', // path to RPC
        })

<a id="how-to-use-simple-handler"></a> How to use simple handler

Create simple RPC handler

<a id="create-simple-handler"></a> Create 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;
    }
}

<a id="add-simple-handler-provider"></a> Add to providers

Add TestHandler to providers array

<a id="test-simple-handler-curl"></a> Test with cURL

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}'

<a id="multi-handlers-in-class"></a> How to use multiple handlers in one class

Create multiple RPC handler in one class

<a id="create-multiple-handlers"></a> Create handlers

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;
    }
}

<a id="add-multiple-handler-provider"></a> Add to providers

Add ContactHandler to providers array

<a id="test-multiple-handler-curl"></a> Test with cURL

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}'

Decorators description

fielddecoratordescriptionrequiredother
params@RpcPayload()get payload ( params )falseuse pipes...
jsonrpc@RpcVersion()get rpc versiontrueuse pipes...
method@RpcMethod()get rpc versiontrueuse pipes...
id@RpcId()get client operation idfalseif not send - response not send, RPC notification. use pipes...

Samples

See examples in samples folder

Changelog:

7.6.0

7.5.0

7.4.0

7.3.2

7.3.0

7.2.0

7.1.1

7.1.0

7.0.0