@exodus/json-rpc
TypeScript icon, indicating that this package has built-in type declarations

1.13.0 • Public • Published

API

const RPC = require('@exodus/json-rpc');
const clientOrServer = new RPC({ transport, requestTimeout, methods });

const result = await clientOrServer.callMethod(
  (methodName: String),
  (parameters: Array)
);
clientOrServer.notify((methodName: String), (parameters: Array)); // same as above but one way only

clientOrServer.exposeMethods({
  methodName: params => result // can return promise
});

// same as exposeMethods but allows to add functions one by one
clientOrServer.exposeFunction('methodName', params => result);

transport is object stream like, anything that implements write() method and on('data', ...) event

Example usage:

const EventEmitter = require('events')
const RPC = require('@exodus/json-rpc')

const transport1 = new EventEmitter()
const transport2 = new EventEmitter()
transport1.write = (data) => {
  console.log('Transport1 write: ', data)
  setTimeout(() => {
    console.log('Emitting data2:', data)
    transport2.emit('data', data)
  }, 500)
}
transport2.write = (data) => {
  console.log('Transport2 write: ', data)
  setTimeout(() => {
    console.log('Emitting data1:', data)
    transport1.emit('data', data)
  }, 500)
}

const server1 = new RPC({ transport: transport1 })
const server2 = new RPC({ transport: transport2 })

server2.exposeMethods({
  testMethod1: (a, b) => {
    console.log('Here!', a, b)
    throw new Error('oops')
    return a + b
  },
  testMethod2: (a, b) => {
    return Promise.resolve(123)
  },
  testMethod3: (a, b) => {
    return
  },
})

server1.exposeMethods({
  foo: () => {
    throw new Error('oops')
  },
})

async function main() {
  const sum = await server1.callMethod('testMethod1', [22, 33])
  console.log(sum)
  await server2.notify('foo')
  await server2.notify('XXX')

  // get the raw response object when making a method call:
  const {
    id,
    jsonrpc,
    error,
    result: sum,
  } = server1.callMethodWithRawResponse('testMethod1', [22, 33])
  console.log(sum)
}

main().catch(console.log)

When the transport emits a message, by default RPC will parse the message with JSON.parse. You can customize this with your own parsing function by specifying the parse constructor option.

const rpc = new RPC({
  transport,
  parse: (jsonString) => {
    // Enforce a maximum message size
    if (jsonString.length > 1000) throw new Error('message is too long')

    // Log messages as they are parsed
    console.log(`New message: ${jsonString}`)

    return JSON.parse(jsonString)
  },
})

/@exodus/json-rpc/

    Package Sidebar

    Install

    npm i @exodus/json-rpc

    Weekly Downloads

    252

    Version

    1.13.0

    License

    MIT

    Unpacked Size

    14.1 kB

    Total Files

    7

    Last publish

    Collaborators

    • juraex
    • kevva
    • doguhan
    • ps.mcnally
    • janwe
    • yevhenii_molodyk
    • javiexodus
    • ismamz
    • exojo
    • feri42
    • jprichardson
    • farisissa
    • ryanzim
    • headfire
    • gutenye
    • mosesbot
    • roccomuso
    • dcastagnoli
    • sonaye
    • ves
    • tenaciousmv
    • asyakost
    • bulgakovk
    • chalker
    • andrejb
    • jaydp17
    • olistic
    • joepie91
    • merlz
    • vbonini
    • mol0d
    • devopsrobot
    • jenish-sojitra
    • markoexodus
    • nachoalvarez
    • giovannirco
    • filipexodus
    • cryptosgr
    • andrescarreon
    • diegomura
    • lanre-mark
    • sunilagrawal
    • guillecura
    • mariosvlad
    • federico-po
    • akinncar
    • fboucquez
    • lanahizzle
    • kwwood
    • umito
    • mzndako
    • joshuabot
    • iaacek
    • meniem
    • skapala
    • awilson-rs
    • ezenwankwogabriel
    • ggabarrin-rs
    • ralph.ba
    • danh.t.vo
    • voltagebots
    • ryansquared-npm
    • alexandrbbm
    • sergii_bo
    • florianmathieu
    • angelloz
    • exodus-justin.za
    • alex.alexandrius
    • rec
    • rg911
    • jamiemaw
    • james-gre
    • shehryar6
    • geoffreyrousset
    • clarkexo
    • tunguyennnnn
    • jschopen
    • cawfree
    • marcos.kichel
    • andrewtoth-exodus
    • cdotta-exodus
    • exorich
    • mmehta-10
    • kryptkeep
    • 633kh4ck
    • mbaraniak-exodus
    • jeehahn
    • hasakura
    • awesomeniko
    • davidexodus
    • r4vn
    • nantoaqui
    • exoleo
    • ale-exo
    • frankliexodus
    • bekatd
    • ronaldcrb
    • muratso
    • metasal
    • yalomist
    • joshua-rogers-exodus