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

0.0.25 • Public • Published

ws-rpc

*Simple, small rfc-correct JSON-RPC 2.0 implementation with encoders support

Usage

Server

import {Server} from '@ws-rpc/server'
import {MsgpackEncoder} from '@ws-rpc/encoder-msgpack'

// see ws lib options
let wss = new Server({
  port: 8081,
  encoders: [MsgpackEncoder], // json by default
  ctx: {db},
})

let bookUpsert = async (ctx, data) => {
  let {book, created} = await ctx.db.bookUpsert(data)
  
  if (created) {
    ctx.emit('book.created', book) // emit event to current client
    // ctx.emitAll('book.created', book) // or to all clients
  }
  
  return book
}

wss.onrpc = async (ctx, method, ...args) => {
  switch (method) {
    case 'book.upsert':
      return bookUpsert(ctx, ...args)
    default:
      ctx.throwMethodNotFound()
  }
}

wss.onevent = (name, ...args) => {
  // process event from client
}

Client

import {Client} from '@ws-rpc/client'
import {MsgpackEncoder} from '@ws-rpc/encoder-msgpack'

let wsc = await new Client({
  url: 'ws://localhost:8080',
  encoders: [MsgpackEncoder], // json by default
}).connect()

wsc.onevent = (event, ...args) => {
  // process event from server
}

let book = await wsc.rpc('book.upsert', {
  name: 'Dune',
  author: 'Franklin Patrick Herbert',
})

Package Sidebar

Install

npm i @ws-rpc/client

Weekly Downloads

2

Version

0.0.25

License

WTFPL

Unpacked Size

7.1 kB

Total Files

6

Last publish

Collaborators

  • farwayer