@mainframe/rpc-handler

JSON-RPC handler

Stats

StarsIssuesVersionUpdatedCreatedSize
@mainframe/rpc-handler
110.3.03 years ago3 years agoMinified + gzip package size for @mainframe/rpc-handler in KB

Readme

rpc-handler

JSON-RPC messages handler.

Installation

yarn add @mainframe/rpc-handler

Usage

import createHandler from '@mainframe/rpc-handler'

const handle = createHandler({
  methods: {
    hello: {
      params: {
        name: 'string'
      },
      handler(ctx, params) => `hello ${params.name}`,
    },
    ping: () => 'pong',
  },
})

const context = {}

const incomingMessage = {
  jsonrpc: '2.0',
  id: 'test',
  method: 'hello',
  params: {
    name: 'bob',
  },
}

const outgoingMessage = await handle(context, incomingMessage)
// outgoingMessage = {jsonrpc: '2.0', id: 'test', result: 'hello bob'}

Types

RPCRequest

Imported from @mainframe/rpc-base

RPCResponse

Imported from @mainframe/rpc-base

ErrorHandler

type ErrorHandler = <C = any, P = any>(ctx: C, msg: RPCRequest<P>, error: Error) => void

MethodHandler

type MethodHandler = <C = any, P = any, R = any>(ctx: C, params: P) => R | Promise<R>

NotificationHandler

type NotificationHandler = <C = any, P = any>(ctx: C, msg: RPCRequest<P>) => void

MethodWithParams

interface MethodWithParams {
  params?: Record<string, any> | undefined
  handler: MethodHandler
}

Methods

type Methods = Record<string, MethodHandler | MethodWithParams>

HandlerParams

type HandlerParams = {
  methods: Methods,
  onHandlerError?: ErrorHandler | undefined,
  onInvalidMessage?: NotificationHandler | undefined,
  onNotification?: NotificationHandler | undefined,
  validatorOptions?: any | undefined,
}

HandlerFunc

type HandlerFunc = <C = any, P = any, R = any, E = any>(
  ctx: C,
  req: RPCRequest<P>,
) => Promise<RPCResponse<R, E>>

API

createHandler()

Default export of the library

Arguments

  1. params: HandlerParams

Returns HandlerFunc

parseJSON()

Tries to parse a JSON string, or throws a RPCError with code -32700 (parse error)

Arguments

  1. input: string

Returns T = any

License

MIT

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.