You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.7 KiB

6 years ago
# 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
6 years ago
- `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`