docs: function(directCalls, callback) {
            _eventsComponents = {};
  
            var events = [];
  
            Object.keys(_components).forEach(function(componentName) {
              _components[componentName].forEach(function(event) {
                if (event.name) {
                  event.names = [event.name];
                }
  
                event.names.forEach(function(eventName) {
                  _eventsComponents[eventName] = _eventsComponents[eventName] || [];
                  _eventsComponents[eventName].push({
                    update: event.update || null,
                    network: event.network || null,
                    url: event.url || null
                  });
  
                  if (events.indexOf(eventName) < 0) {
                    events.push(eventName);
                  }
                });
              });
            });
  
            if (callback) {
              $socket.once('read(real-time/events)', function(args) {
                callback(args);
              });
            }
  
            var eventsStringified = JSON.stringify(events);
  
            if (eventsStringified == _lastEvents) {
              return;
            }
  
            _lastEvents = eventsStringified;
  
            $socket.emit('update(real-time/events)', {
              directCalls: directCalls || null,
              events: events
            });
          }