lib/examples/nostr_app.ex

defmodule NostrApp do
  @moduledoc """
  An example of an app enabling pretty much every raw commands this
  lib has to offer
  """

  alias NostrApp.Server

  alias Nostr.Models.Profile

  def start_link(relays, private_key) do
    args = %{relays: relays, private_key: private_key}

    GenServer.start_link(Server, args, name: Server)
  end

  ### NIP-01
  def profile(pubkey \\ nil) do
    GenServer.cast(Server, {:profile, pubkey})
  end

  ### NIP-01
  def update_profile(%Profile{} = profile) do
    GenServer.cast(Server, {:update_profile, profile})
  end

  ### NIP-01
  def note(note_id) do
    GenServer.cast(Server, {:note, note_id})
  end

  ### NIP-01
  def notes() do
    GenServer.cast(Server, {:notes})
  end

  ### NIP-01
  def notes(pubkeys) do
    GenServer.cast(Server, {:notes, pubkeys})
  end

  ### NIP-01
  def send_note(note) do
    GenServer.cast(Server, {:send_note, note})
  end

  ### NIP-02
  def contacts() do
    GenServer.cast(Server, {:contacts})
  end

  ### NIP-02
  def contacts(pubkey) do
    GenServer.cast(Server, {:contacts, pubkey})
  end

  ### NIP-02
  def follow(pubkey) do
    GenServer.cast(Server, {:follow, pubkey})
  end

  ### NIP-02
  def unfollow(pubkey) do
    GenServer.cast(Server, {:unfollow, pubkey})
  end

  ## NIP-04
  def encrypted_direct_messages() do
    GenServer.cast(Server, {:encrypted_direct_messages})
  end

  ## NIP-04
  def encrypted_direct_messages(private_key) do
    GenServer.cast(Server, {:encrypted_direct_messages, private_key})
  end

  ## NIP-04
  def send_encrypted_direct_messages(pubkey, message) do
    GenServer.cast(Server, {:send_encrypted_direct_messages, pubkey, message})
  end

  def delete(event_ids, note \\ "")

  ### NIP-09
  def delete(event_id, note) when is_binary(event_id) do
    delete([event_id], note)
  end

  ### NIP-09
  def delete(event_ids, note) when is_list(event_ids) do
    GenServer.cast(Server, {:delete, event_ids, note})
  end

  ### NIP-09
  def deletions() do
    GenServer.cast(Server, {:deletions})
  end

  ### NIP-09
  def deletions(pubkeys) when is_list(pubkeys) do
    GenServer.cast(Server, {:deletions, pubkeys})
  end

  ### NIP-18
  def repost(note_id) do
    GenServer.cast(Server, {:repost, note_id})
  end

  ### NIP-18
  def reposts() do
    GenServer.cast(Server, {:reposts})
  end

  ### NIP-18
  def reposts(pubkeys) when is_list(pubkeys) do
    GenServer.cast(Server, {:reposts, pubkeys})
  end

  ### NIP-25
  def react(note_id) do
    GenServer.cast(Server, {:react, note_id})
  end

  ### NIP-25
  def reactions() do
    GenServer.cast(Server, {:reactions})
  end

  ### NIP-25
  def reactions(pubkeys) when is_list(pubkeys) do
    GenServer.cast(Server, {:reactions, pubkeys})
  end

  ### Combination of multiple NIPs
  def timeline() do
    GenServer.cast(Server, {:timeline})
  end

  ### Combination of multiple NIPs
  def timeline(pubkey) do
    GenServer.cast(Server, {:timeline, pubkey})
  end
end