Package Exports
- @ceramicnetwork/rpc-postmessage
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@ceramicnetwork/rpc-postmessage) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
postMessage RPC
RPC utilities using postMessage
Installation
npm install @ceramicnetwork/rpc-postmessageUsage
import { createNamespaceClient, createNamespaceServer } from '@ceramicnetwork/rpc-postmessage'
type Methods = {
foo: { result: string }
}
const server = createNamespaceServer<Methods>({
target: window, // Listens to requests on window
namespace: 'test',
methods: { foo: () => 'bar' },
}).subscribe()
// Sends requests and receives responses on window
const transport = createPostMessageTransport(window, window, { postMessageArguments: ['*'] })
const client = createNamespaceClient(transport, 'test')
await client.request('foo') // 'bar'
// Stop server when done
server.unsubscribe()Types
RequestPayload
Uses RPCMethods and RPCRequest
type RequestPayload<Message, Methods extends RPCMethods, K extends keyof Methods> = {
type: 'request'
message: Message
request: RPCRequest<Methods, K>
}HandledPayload
Uses RPCMethods, RPCRequest and RPCResponse
type HandledPayload<Message, Methods extends RPCMethods, K extends keyof Methods> = {
type: 'handled'
message: Message
request: RPCRequest<Methods, K>
response: RPCResponse<Methods, K> | null
}ServerOptions
Uses RPCMethods, HandlerMethods and HandlerOptions
type type ServerOptions<Context, Methods extends RPCMethods> = HandlerOptions<
Context,
Methods
> & {
target: PostMessageTarget
methods: HandlerMethods<Context, Methods>
}NamespaceServerOptions
export type NamespaceServerOptions<
Methods extends RPCMethods,
Namespace extends string = string,
Message = IncomingMessage<Wrapped<RPCRequest<Methods, keyof Methods>, Namespace>>
> = ServerOptions<Message, Methods> & {
namespace: Namespace
filter?: string | Array<string> | MessageFilter
}NamespaceClientTransport
type NamespaceClientTransport<
Methods extends RPCMethods,
Namespace extends string,
Incoming = IncomingMessage<Wrapped<RPCResponse<Methods, keyof Methods>, Namespace>>,
Outgoing = Wrapped<RPCRequest<Methods, keyof Methods>, Namespace>
> = TransportSubject<Incoming, Outgoing>APIs
serve()
Receives requests and sends responses on the provided target
Type parameters
Arguments
Returns Subscription
createNamespaceRequestHandlerOperator()
Type parameters
Methods extends RPCMethodsNamespace extends string = stringMessage = IncomingMessage<Wrapped<RPCRequest<Methods, keyof Methods>, Namespace>>
Arguments
methods: HandlerMethods<Message, Methods>namespace: Namespaceoptions?: HandlerOptions<Message, Methods> = {}
Returns OperatorFunction<Message, HandledPayload<Message, Methods, keyof Methods>>
createNamespaceServer()
Type parameters
Methods extends RPCMethodsNamespace extends string = stringRequest = Wrapped<RPCRequest<Methods, keyof Methods>, Namespace>
Arguments
Returns Observable<HandledPayload<IncomingMessage<Request>, Methods, keyof Methods>>
createNamespaceSendRequest()
Type parameters
Methods extends RPCMethodsNamespace extends string = string
Arguments
transport: NamespaceClientTransport<Methods, Namespace>namespace: Namespaceoptions?: UnwrapObservableOptions
Returns SendRequestFunc<Methods>
createNamespaceClient()
Type parameters
Methods extends RPCMethodsNamespace extends string = string
Arguments
transport: NamespaceClientTransport<Methods, Namespace>namespace: Namespaceoptions?: UnwrapObservableOptions
Returns RPCClient<Methods>
License
Apache-2.0 OR MIT