Source: server/pm-server.js

/* eslint-env browser */

import PostMessageRespondingRouter from './pm-responding-router.js';

/** A JSON-RPC 2.0 server that handles requests and notifications over `window.postMessage`. */
export default class Server extends PostMessageRespondingRouter {
	/** Constructs a Server instance.
	  * @param {object} handlers - The object whose methods will be exposed over JSON-RPC.
	  *							   Each method may return either a Promise, a plain value, or nothing at all.
	  * @param {MessageEventHandler=} defaultHandler - This callback is invoked when a `message` event cannot be
	  * 											   routed to a handler. If this is omitted, unroutable messages
	  *												   will cause exceptions to be thrown.
	  */
    constructor(handlers, defaultHandler) {
        super(handlers, defaultHandler);
    }

	/** Start listening for `message` events.
     * @param {Window} window - The browser window to which a handler will be attached.
     */
    mount(window) {
        window.addEventListener('message', this.handleMessage);
    }


    /** Stop listening for `message` events.
     * @param {Window} window - The browser window from which the handler will be detached.
     */
    unmount(window) {
        window.removeEventListener('message', this.handleMessage);
    }
}

/**
 * @callback MessageEventHandler
 * @param {MessageEvent} event
 */