code: function createConnectionWithProtocol ({ protocol, connection, callback }) {
    if (!protocol) {
      return callback()
    }
    connection.shake(protocol, (err, conn) => {
      if (!conn) {
        return callback(err)
      }
  
      conn.setPeerInfo(connection.theirPeerInfo)
      callback(null, conn)
    })
  }
docs: @typedef {Object} NewConnection
  @property {ConnectionFSM} connectionFSM
  @property {boolean} didCreate
   
  Attempts to create a new connection or stream (when muxed),
  via negotiation of the given `protocol`. If no `protocol` is
  provided, no action will be taken and `callback` will be called
  immediately with no error or values.
  
  @param {object} options
  @param {string} options.protocol
  @param {ConnectionFSM} options.connection
  @param {function(Error, Connection)} options.callback
  @returns {void}