code: function JRPC(options) {
    this.active = true;
    this.transmitter = null;
    this.remoteTimeout = 60000;
    this.localTimeout = 0;
    this.serial = 0;
    this.outbox = {
      requests : [],
      responses: []
    };
    this.inbox = {};
    this.localTimers = {};
    this.outTimers = {};
    this.localComponents = {
      'system.listComponents'      : true,
      'system.extension.dual-batch': true
    };
    this.remoteComponents = {};
    this.exposed = {};
  
    this.exposed['system.listComponents'] = (function(params, next) {
      if (typeof params === 'object' && params !== null) {
        this.remoteComponents = params;
        this.remoteComponents['system._upgraded'] = true;
      }
      return next(null, this.localComponents);
    }).bind(this);
  
    this.exposed['system.extension.dual-batch'] = function(params, next) {
      return next(null, true);
    };
  
    if (typeof options === 'object') {
      if (
        'remoteTimeout' in options
        && typeof options['remoteTimeout'] === 'number'
      ) {
        this.remoteTimeout = options['remoteTimeout'] * 1000;
      }
  
      if (
        'localTimeout' in options
        && typeof options['localTimeout'] === 'number'
      ) {
        this.localTimeout = options['localTimeout'] * 1000;
      }
    }
  }
docs: Constructor
  
  @typedef {Object} JRPC
  
  @param {Object} [options] Options to initialize with
  
  @return {undefined} No return value