Packages

Connect to the nostr network with Elixir

Current section

Files

Jump to
nostr lib nostr client frame_dispatcher.ex
Raw

lib/nostr/client/frame_dispatcher.ex

defmodule Nostr.Client.FrameDispatcher do
@moduledoc """
Raw websocket frames are sent to this module so they end up being
dispatched to the right module depending on their types
"""
require Logger
alias Nostr.Event
alias Nostr.Event.Types.EndOfStoredEvents
def dispatch(["EVENT" | [request_id | [data]]]) do
case Event.Dispatcher.dispatch(data) do
{:ok, event} -> {:ok, {request_id, event}}
{:error, message} -> {:error, message}
end
end
def dispatch(["EOSE", request_id]) do
{:ok, {request_id, %EndOfStoredEvents{}}}
end
def dispatch(["NOTICE", message]) do
Logger.debug("NOTICE: #{message}")
{:ok, {"", "NOTICE #{message}"}}
end
def dispatch(["OK", request_id, ok?, message]) do
Logger.debug("OK: #{message}")
{:ok, {request_id, "OK #{request_id}, #{ok?}, #{message}"}}
end
def dispatch([type | _remaining]) do
Logger.debug("UNKNOWN FRAME TYPE: #{type}")
{:error, "unknown frame type: #{type}"}
end
end