anchor.diff:             async => boolean(),
              async_data => binary | sse,
              handle_event => fun((fin | nofin, reference(), binary()) -> any()),
  -           basic_auth => {string(), string()}
  +           basic_auth => {string(), string()},
  +           timeout => pos_integer() | infinity %% Default 5000 ms
            }.
   -type http_verb() :: get | post | head | delete | patch | put | options.
   
  
positive.code:     #{handle_event => HandleEvent,
        async => Async,
        async_mode => AsyncMode,
        headers => Headers}.
  
  %% @private
  basic_auth_header(Headers) ->
  
negative.code:                     false ->
                          {get, {Uri, Headers, Body}}
                  end,
          gen_fsm:sync_send_event(Pid, Event, Timeout)
      catch
          _:Reason -> {error, Reason}
      end;
  request(Pid, Method, Uri, Headers0, Body, Options) ->
      try
          check_uri(Uri),
          #{headers := Headers, timeout := Timeout} = process_options(Options, Headers0, Method),
          Event = {Method, {Uri, Headers, Body}},
          gen_fsm:sync_send_event(Pid, Event, Timeout)
      catch
          _:Reason -> {error, Reason}
      end.
  