code: function handleConnectionEndpoints (config) {
    // delete any endpoints that have been set to `null`
    for (const type in config.connectionEndpoints) {
      if (!config.connectionEndpoints[type]) {
        delete config.connectionEndpoints[type]
      }
    }
    if (!config.connectionEndpoints || Object.keys(config.connectionEndpoints).length === 0) {
      throw new Error('No connection endpoints configured')
    }
    const connectionEndpoints = []
    for (const connectionType in config.connectionEndpoints) {
      const plugin = config.connectionEndpoints[connectionType]
  
      plugin.options = plugin.options || {}
  
      let PluginConstructor
      if (plugin.name === 'uws') {
        PluginConstructor = UWSConnectionEndpoint
      } else if (plugin.name === 'http') {
        PluginConstructor = HTTPConnectionEndpoint
      } else {
        PluginConstructor = resolvePluginClass(plugin, 'connection')
      }
      connectionEndpoints.push(new PluginConstructor(plugin.options))
    }
    config.connectionEndpoints = connectionEndpoints
  }
docs: Handle connection endpoint plugin config.
  The type is typically the protocol e.g. ws
  Plugins can be passed either as a __path__ property or as a __name__ property with
  a naming convetion: *{amqp: {name: 'my-plugin'}}* will be resolved to the
  npm module *deepstream.io-connection-my-plugin*
  Exception: the name *uws* will be resolved to deepstream.io's internal uWebSockets plugin
  Options to the constructor of the plugin can be passed as *options* object.
  
  CLI arguments will be considered.
  
  @param {Object} config deepstream configuration object
  
  @private
  @returns {void}