Parrhesia.Web.Connection (parrhesia v0.12.0)

Copy Markdown

Per-connection websocket process state and message handling.

Summary

Types

overflow_strategy()

@type overflow_strategy() :: :close | :drop_oldest | :drop_newest

subscription()

@type subscription() :: %{
  ref: reference(),
  filters: [map()],
  exclude_filters: [map()],
  eose_sent?: boolean()
}

t()

@type t() :: %Parrhesia.Web.Connection{
  auth_challenge: String.t() | nil,
  auth_challenges: GenServer.server() | nil,
  auth_max_age_seconds: pos_integer(),
  authenticated_pubkeys: MapSet.t(String.t()),
  drain_scheduled?: boolean(),
  event_ingest_count: non_neg_integer(),
  event_ingest_window_seconds: pos_integer(),
  event_ingest_window_started_at_ms: integer(),
  ingest_limiters: %{
    relay: GenServer.server() | nil,
    remote_ip: GenServer.server() | nil,
    pubkey: GenServer.server() | nil
  },
  listener: map() | nil,
  max_event_bytes: pos_integer(),
  max_event_ingest_per_window: pos_integer(),
  max_frame_bytes: pos_integer(),
  max_outbound_queue: pos_integer(),
  max_subscriptions_per_connection: pos_integer(),
  negentropy_sessions: GenServer.server() | nil,
  outbound_drain_batch_size: pos_integer(),
  outbound_overflow_strategy: overflow_strategy(),
  outbound_queue: :queue.queue({String.t(), map()}),
  outbound_queue_size: non_neg_integer(),
  relay_url: String.t() | nil,
  remote_ip: String.t() | nil,
  subscription_index: GenServer.server() | nil,
  subscriptions: %{required(String.t()) => subscription()},
  track_population?: boolean(),
  transport_identity: map() | nil,
  websocket_awaiting_pong_payload: binary() | nil,
  websocket_keepalive_timeout_timer_ref: reference() | nil,
  websocket_ping_interval_seconds: non_neg_integer(),
  websocket_pong_timeout_seconds: pos_integer()
}