Behaviour for the connection underneath Snodo.Client.
A transport moves one complete JSON-RPC request to a server and returns the
complete JSON-RPC response. Snodo.Client builds the request and decodes the
response, so a transport never interprets result or error.
request/3 receives these options:
:timeout- milliseconds to wait for the response.:dialect- the protocol dialect module that built the request. HTTP uses itstransport_policy/1to derive headers.:on_progress- present when the caller asked for progress. A function of one argument to call, in the process that calledrequest/3, with theparamsof eachnotifications/progresswhoseprogressTokenis the request'sparams["_meta"]["progressToken"], before returning the response.:reset_timeout_on_progress- whentrue, each delivered progress notification restarts:timeout, up to:max_total_timeoutmilliseconds after the request started. Past that the request fails withmax_total_timeout_error/1.
A transport that ignores the progress options delivers no progress and keeps a fixed timeout.
Failures of the connection itself are %Snodo.Error{kind: :transport}. Use
connection_error/2 (-32000) and timeout_error/1 (-32001), the codes the
official TypeScript SDK uses for the same client-side conditions.
Summary
Functions
The connection is closed, unreachable, or produced an unusable response.
Progress kept moving the deadline of a request, and the response had not
arrived max_total_timeout milliseconds after the request started.
No response arrived within timeout milliseconds.
Types
@type state() :: term()
Callbacks
@callback close(state()) :: :ok
@callback connect(init_arg :: term(), opts :: keyword()) :: {:ok, state()} | {:error, Snodo.Error.t()}
@callback request(state(), message :: map(), opts :: keyword()) :: {:ok, map()} | {:error, Snodo.Error.t()}
Functions
@spec connection_error(String.t(), term()) :: Snodo.Error.t()
The connection is closed, unreachable, or produced an unusable response.
@spec max_total_timeout_error(pos_integer()) :: Snodo.Error.t()
Progress kept moving the deadline of a request, and the response had not
arrived max_total_timeout milliseconds after the request started.
@spec timeout_error(timeout()) :: Snodo.Error.t()
No response arrived within timeout milliseconds.