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
Arguments
Returns SendRequestFunc<Methods>
createClient()
Type parameters
Arguments
Returns RPCClient<Methods>
createHandlerOperator()
Type parameters
Context
Methods extends RPCMethods
Arguments
context: Context
methods: HandlerMethods<Context, Methods>
options?: HandlerOptions<Context, Methods>
Returns OperatorFunction<RPCRequest<Methods, keyof Methods>, RPCResponse<Methods, keyof Methods> | null>
serve()
Type parameters
Context
Methods extends RPCMethods
Arguments
transport: RPCServerTransport<Methods>
context: Context
methods: HandlerMethods<Context, Methods>
options?: HandlerOptions<Context, Methods>
Returns Subscription
License
Apache-2.0 OR MIT