defmodule MatrixAppService.Client do @moduledoc """ """ @type client_options :: {:base_url, String.t()} | MatrixAppService.Client.LowLevel.create_opts() @doc """ """ @spec client([client_options()]) :: Polyjuice.Client.LowLevel.t() def client(opts \\ []) do base_url = Keyword.get(opts, :base_url, Application.fetch_env!(:matrix_app_service, :base_url)) default_opts = [ access_token: Application.fetch_env!(:matrix_app_service, :access_token), device_id: "APP_SERVICE" ] opts = Keyword.merge(default_opts, opts) Polyjuice.Client.LowLevel.create(base_url, opts) end @doc """ """ @spec create_room(Keyword.t()) :: {:ok, String.t()} | Any def create_room(options \\ [], client_options \\ []) do client(client_options) |> Polyjuice.Client.Room.create_room(options) end @doc """ """ @spec create_alias(String.t(), String.t(), client_options()) :: {:ok, String.t()} | Any def create_alias(room_id, room_alias, client_options \\ []) do client(client_options) |> Polyjuice.Client.Room.create_alias(room_id, room_alias) end @doc """ """ @spec register(Polyjuice.Client.LowLevel.register_opts(), client_options()) :: {:ok, String.t()} | Any def register(opts \\ [], client_options \\ []) do default_opts = [ inhibit_login: true, device_id: "APP_SERVICE", initial_device_display_name: "Application Service" ] opts = Keyword.merge(default_opts, opts) client(client_options) |> Polyjuice.Client.LowLevel.register(opts) end end