JSPM

@ceramicnetwork/rpc-postmessage

0.2.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 545
  • Score
    100M100P100Q110125F
  • License (Apache-2.0 OR MIT)

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-postmessage

Usage

import { serveCrossOrigin } from '@ceramicnetwork/rpc-postmessage'

type Methods = {
  foo: { result: string }
}

const server = serveCrossOrigin<Methods>(window, {
  allowedOrigin: ['https://foo.bar', 'http://localhost'], // Allow messages from these origins
  ownOrigin: 'http://localhost', // Server messages will be sent using this origin
  methods: {
    foo: () => 'bar',
  },
})

// Stop server when done
server.unsubscribe()

Types

ErrorPayload

type ErrorPayload<Message, Error = any> = {
  type: 'error'
  message: Message
  error: Error
}

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
}

ResponsePayload

Uses RPCMethods, RPCRequest and RPCResponse

type ResponsePayload<Message, Methods extends RPCMethods, K extends keyof Methods> = {
  type: 'response'
  message: Message
  request: RPCRequest<Methods, K>
  response: RPCResponse<Methods, K>
}

OutPayload

Uses RPCMethods, RPCRequest and RPCResponse

type OutPayload<Message, Methods extends RPCMethods, K extends keyof Methods, Error = any> =
  | ErrorPayload<Message, Error>
  | HandledPayload<Message, Methods, K>
  | ResponsePayload<Message, Methods, K>

ServerOptions

Uses RPCMethods, HandlerMethods and HandlerOptions

type type ServerOptions<Context, Methods extends RPCMethods> = HandlerOptions<
  Context,
  Methods
> & {
  target: PostMessageTarget
  methods: HandlerMethods<Context, Methods>
}

CrossOriginServerOptions

export type CrossOriginServerOptions<
  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
  sendResponse?: (payload: ResponsePayload<Message, Methods, keyof Methods>) => void
}

WrappedClientTransport

type WrappedClientTransport<
  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

serveSameOrigin()

Receives requests and sends responses on the provided target

Type parameters

  1. Methods extends RPCMethods

Arguments

  1. options: ServerOptions<null, Methods>

Returns Subscription

createCrossOriginRequestHandlerOperator()

Type parameters

  1. Methods extends RPCMethods
  2. Namespace extends string = string
  3. Message = IncomingMessage<Wrapped<RPCRequest<Methods, keyof Methods>, Namespace>>

Arguments

  1. methods: HandlerMethods<Message, Methods>
  2. namespace: Namespace
  3. options?: HandlerOptions<Message, Methods> = {}

Returns OperatorFunction<Message, OutPayload<Message, Methods, keyof Methods>>

createCrossOriginServer()

Type parameters

  1. Methods extends RPCMethods
  2. Namespace extends string = string
  3. Request = Wrapped<RPCRequest<Methods, keyof Methods>, Namespace>

Arguments

  1. options: CrossOriginServerOptions<Methods, Namespace, IncomingMessage<Request>>

Returns Observable<OutPayload<IncomingMessage<Request>, Methods, keyof Methods>>

createCrossOriginSendRequest()

Type parameters

  1. Methods extends RPCMethods
  2. Namespace extends string = string

Arguments

  1. transport: WrappedClientTransport<Methods, Namespace>
  2. namespace: Namespace
  3. options?: UnwrapObservableOptions

Returns SendRequestFunc<Methods>

createCrossOriginClient()

Type parameters

  1. Methods extends RPCMethods
  2. Namespace extends string = string

Arguments

  1. transport: WrappedClientTransport<Methods, Namespace>
  2. namespace: Namespace
  3. options?: UnwrapObservableOptions

Returns RPCClient<Methods>

License

Apache-2.0 OR MIT