   `ServerChannel` handles incoming and outgoing messages between players and
   servers.
 
-  Common errors (applicable to all requests expected to reply something):
+  Base errors (applicable to all requests expected to reply something):
 
   - "bad_request" - One or more request params are invalid.
   - "internal" - Something unexpected happened.

  Errors:
  - "web_not_found" - The given address was not be found.
  - "bad_origin" - The given origin is neither `gateway_id` nor `destination_id`
  """
  def handle_in("network.browse", params, socket) do
    request = BrowseRequest.new(params)

    as: BruteforceRequest

  @doc """
  Joins a server.

  Topic:
  "server:<network_id>@<destination_ip>[#<counter>]"

  [#<counter>] denotes optional argument. If omitted, Helix will automatically
  grab the correct counter.

  `counter` must be set by the client if:
  1) the player joins the same server multiple times, using different gateways
  2) the client must know the topic name in advance

  Otherwise, simply ignore `counter` and everything will be fine.

  Params:
  - gateway_ip: Notifies which gateway ip this connection is originating from.
    If no `gateway_ip` is passed, a local gateway connection is assumed.
  - password: Target server password. Required if the connection is remote.

  Returns:
  %{}  # TODO: Return server bootstrap

  Errors:
  - "nip_not_found": The `destination_ip` with `network_id` was not found.
  - "bad_counter": The given counter is not valid.
  + base errors
  """
  def join(topic = "server:" <> _, params, socket) do
    access_type =
