code: function Bus(options) {
    events.EventEmitter.call(this);
  
    this.id = "bus:" + crypto.randomBytes(8).toString('hex');
    this.notificationsChannel = 'bus:notifications';
    this.logger = new Logger(this.id);
  
    this.connections = [];
    this.connectionsCache = {};
    this.connectionsCacheTimeout = 10*60*1000; // keep connections cached around for 10 minutes
  
    this.online = false;
    this.eventsCallbacks = {};
  
    this._options(options);
  
    this._startFederationServer();
  
    if (this.options.redis.length > 0) {
      this._loadScripts();
    } else {
      var _this = this;
      process.nextTick(function() {
        _this.emit('online');
      });
    }
  }
docs: A message bus.
  Options:
  - redis - url string of a single redis to connect to or an array of string urls to connects to. a url must have the form redis://<host>[:<port>]
  - layout
  'direct': direct connection to redis instances (default)
  'sentinels': urls provided are that of sentinels (only supported by the ioredis driver)
  'cluster': urls provided belong to a redis cluster (only supported by the ioredis driver)
  - redisOptions: options to pass to the redis client on instantiation (default to {}). Driver specific.
  - driver: redis driver to use: 'node-redis' or 'ioredis' (defaults to 'node-redis')
  - federate - object with the following options:
  - server - an http/https server object to listen for incoming federate connections. if undefined then federation server will not be open.
  - secret - a secret key to authenticate with the federates. this key must be shared among all federates. default is 'notsosecret'.
  - path - specifies the path within the server to accept federation connections on
  @constructor