@ceramicnetwork/rpc-transport

Bridge between transports and RPC utilities

Usage no npm install needed!

<script type="module">
  import ceramicnetworkRpcTransport from 'https://cdn.skypack.dev/@ceramicnetwork/rpc-transport';
</script>

README

RPC transport

Bridge between transports and RPC utilities

Installation

npm install @ceramicnetwork/rpc-transport

Usage

import { createClient, serve } from '@ceramicnetwork/rpc-transport'

// Methods type shared between the client and server
type Methods = {
  foo: { result: string }
}

// Using requests and responses subjects here or demonstration purposes only
const requests = new Subject<RPCRequest<Methods, keyof Methods>>()
const responses = new Subject<RPCResponse<Methods, keyof Methods>>()
const clientTransport = new TransportSubject(responses, requests)
const serverTransport = new TransportSubject(requests, responses)

// Start server handling methods on given transport
const server = serve<null, Methods>(serverTransport, null, {
  foo: () => 'bar',
})

class TestClient {
  constructor(transport: TransportSubject) {
    this.client = createClient<Methods>(transport)
  }

  async foo() {
    return await this.client.request('foo')
  }
}

const client = new TestClient()
await client.foo() // 'bar'

// Stop server when done
server.unsubscribe()

Types

RPCClientTransport

Uses RPCMethods, RPCRequest and RPCResponse

type RPCClientTransport<Methods extends RPCMethods> = TransportSubject<
  RPCResponse<Methods, keyof Methods>,
  RPCRequest<Methods, keyof Methods>
>

RPCServerTransport

Uses RPCMethods, RPCRequest and RPCResponse

type RPCClientTransport<Methods extends RPCMethods> = TransportSubject<
  RPCRequest<Methods, keyof Methods>,
  RPCResponse<Methods, keyof Methods>
>

APIs

createSendRequest()

Type parameters

  1. Methods extends RPCMethods

Arguments

  1. transport: RPCClientTransport<Methods>

Returns SendRequestFunc<Methods>

createClient()

Type parameters

  1. Methods extends RPCMethods

Arguments

  1. transport: RPCClientTransport<Methods>

Returns RPCClient<Methods>

createHandlerOperator()

Type parameters

  1. Context
  2. Methods extends RPCMethods

Arguments

  1. context: Context
  2. methods: HandlerMethods<Context, Methods>
  3. options?: HandlerOptions<Context, Methods>

Returns OperatorFunction<RPCRequest<Methods, keyof Methods>, RPCResponse<Methods, keyof Methods> | null>

serve()

Type parameters

  1. Context
  2. Methods extends RPCMethods

Arguments

  1. transport: RPCServerTransport<Methods>
  2. context: Context
  3. methods: HandlerMethods<Context, Methods>
  4. options?: HandlerOptions<Context, Methods>

Returns Subscription

License

Apache-2.0 OR MIT