ExWapp.Client.Transport behaviour (ExWapp v0.1.2)

Copy Markdown View Source

Behaviour for high-level, runtime-neutral ExWapp client adapters.

The Transport name is retained for API compatibility, but this is not a wire transport. The adapter is owned by the host application and connects the public client API to a complete runtime, session, queue, or test double.

Production WhatsApp messaging should use ExWapp.Client.Transport.Session. A raw WebSocket alone cannot implement this contract safely because it lacks Signal sessions, device fanout, sender keys, retry, and synchronized state.

Summary

Callbacks

connect(t)

@callback connect(ExWapp.Client.t()) :: {:ok, ExWapp.Client.t()} | {:error, term()}

create_contact(t, t, t)

(optional)
@callback create_contact(ExWapp.Client.t(), String.t(), String.t()) ::
  {:ok, ExWapp.Client.t()} | :ok | {:error, term()}

delete_contact(t, t)

(optional)
@callback delete_contact(ExWapp.Client.t(), String.t()) ::
  {:ok, ExWapp.Client.t()} | :ok | {:error, term()}

delete_messages(t, t, list)

(optional)
@callback delete_messages(ExWapp.Client.t(), String.t(), [String.t()]) ::
  {:ok, ExWapp.Client.t()} | :ok | {:error, term()}

disconnect(t)

(optional)
@callback disconnect(ExWapp.Client.t()) ::
  {:ok, ExWapp.Client.t()} | :ok | {:error, term()}

download_media(t, t, keyword)

(optional)
@callback download_media(ExWapp.Client.t(), ExWapp.Media.Ref.t(), keyword()) ::
  {:ok, ExWapp.Client.t(), ExWapp.Media.Download.t()} | {:error, term()}

get_call(t, t)

(optional)
@callback get_call(ExWapp.Client.t(), String.t()) ::
  {:ok, ExWapp.Call.t()} | {:error, term()}

get_chat(t, t)

(optional)
@callback get_chat(ExWapp.Client.t(), String.t()) ::
  {:ok, ExWapp.Chat.chat()} | {:error, term()}

get_contact(t, t)

(optional)
@callback get_contact(ExWapp.Client.t(), String.t()) ::
  {:ok, ExWapp.Contact.t() | nil} | {:error, term()}

get_messages(t, t, keyword)

(optional)
@callback get_messages(ExWapp.Client.t(), String.t(), keyword()) ::
  {:ok, [ExWapp.Chat.message()]} | {:error, term()}

list_calls(t, keyword)

(optional)
@callback list_calls(
  ExWapp.Client.t(),
  keyword()
) :: {:ok, [ExWapp.Call.t()]} | {:error, term()}

list_chats(t)

(optional)
@callback list_chats(ExWapp.Client.t()) :: {:ok, [ExWapp.Chat.chat()]} | {:error, term()}

list_contacts(t)

(optional)
@callback list_contacts(ExWapp.Client.t()) ::
  {:ok, [ExWapp.Contact.t()]} | {:error, term()}

list_groups(t)

(optional)
@callback list_groups(ExWapp.Client.t()) :: {:ok, [ExWapp.Chat.chat()]} | {:error, term()}

pair(t)

(optional)
@callback pair(ExWapp.Client.t()) :: {:ok, ExWapp.Client.t(), term()} | {:error, term()}

receive_message(t, term, keyword)

(optional)
@callback receive_message(ExWapp.Client.t(), term(), keyword()) ::
  {:ok, ExWapp.Client.t(), [ExWapp.Event.t()]}
  | {:ok, [ExWapp.Event.t()]}
  | {:error, term()}

send_message(t, t)

@callback send_message(ExWapp.Client.t(), ExWapp.Message.t()) ::
  {:ok, String.t()}
  | {:ok, ExWapp.Client.t(), String.t()}
  | {:error, ExWapp.Client.t(), term()}
  | {:error, term()}

stream_messages(t, t, keyword)

(optional)
@callback stream_messages(ExWapp.Client.t(), String.t(), keyword()) ::
  {:ok, Enumerable.t()} | {:error, term()}

sync_contacts(t)

(optional)
@callback sync_contacts(ExWapp.Client.t()) ::
  {:ok, ExWapp.Client.t()} | :ok | {:error, term()}

update_contact(t, t, arg3)

(optional)
@callback update_contact(ExWapp.Client.t(), String.t(), map() | keyword()) ::
  {:ok, ExWapp.Client.t()} | :ok | {:error, term()}