|
|
|
# pmrpc
|
|
|
|
|
|
|
|
[![Build Status](https://travis-ci.org/statianzo/pmrpc.svg?branch=master)](https://travis-ci.org/statianzo/pmrpc)
|
|
|
|
|
|
|
|
JSON-RPC implemented using postMessage API
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
```sh
|
|
|
|
npm install pmrpc
|
|
|
|
```
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
### iframe within parent
|
|
|
|
|
|
|
|
```js
|
|
|
|
import JsonRpc from './JsonRpc';
|
|
|
|
|
|
|
|
const rpc = new JsonRpc({
|
|
|
|
methods: {
|
|
|
|
greet: name => `Hello ${name}`
|
|
|
|
},
|
|
|
|
source: window
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Parent window
|
|
|
|
|
|
|
|
```js
|
|
|
|
import JsonRpc from './JsonRpc';
|
|
|
|
|
|
|
|
const rpc = new JsonRpc({
|
|
|
|
destination: iframe.contentWindow
|
|
|
|
});
|
|
|
|
|
|
|
|
rpc
|
|
|
|
.call('greet', 'World')
|
|
|
|
.then(response => {
|
|
|
|
console.log(response); // "Hello World"
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
## JsonRpc Options
|
|
|
|
|
|
|
|
- `origin` - (Default: `*`) Origin to send messages
|
|
|
|
- `methods` - (Default: `{}`) An object of exposed methods. Returning a Promise will defer responding until the promise has completed
|
|
|
|
- `source` - The source EventTarget to mount JSON rpc on (`Window`, `MessagePort`, etc)
|
|
|
|
- `destination` - Target MessageEventSource to send requests to
|
|
|
|
|
|
|
|
## API
|
|
|
|
|
|
|
|
### JsonRpc.apply(method, [arg1, arg2, ...])
|
|
|
|
|
|
|
|
Invoke a remote rpc method with an array of arguments (like `Function.apply`).
|
|
|
|
Returns a `Promise` with the result of the request. Errors from the endpoint
|
|
|
|
will result in a rejected promise.
|
|
|
|
|
|
|
|
### JsonRpc.call(method, ...args)
|
|
|
|
|
|
|
|
Invoke a remote rpc method with a variadic list of arguments (like
|
|
|
|
`Function.call`). Returns a `Promise` with the result of the request.
|
|
|
|
Errors from the endpoint will result in a rejected promise.
|
|
|
|
|
|
|
|
### JsonRpc.mount(source)
|
|
|
|
|
|
|
|
Mount JsonRpc to a source EventTarget (Window, MessagePort, Worker). This is
|
|
|
|
called automatically when a `source` is passed to the constructor.
|
|
|
|
|
|
|
|
### JsonRpc.unmount()
|
|
|
|
|
|
|
|
Detach the event listener from the JsonRpc instance's `source`
|