defmodule ATProto do @moduledoc """ `com.atproto` lexicon functions. """ # com.atproto.identity (https://atproto.com/lexicons/com-atproto-identity) @doc """ Provides the DID of a repo. """ def resolve_handle(client, handle \\ nil) do params = [handle: handle] XRPC.query(client, "com.atproto.identity.resolveHandle", params: params) end # com.atproto.server (https://atproto.com/lexicons/com-atproto-server) @doc """ Create an authentication session. """ def create_session(client, identifier, password) do body = %{identifier: identifier, password: password} |> Jason.encode!() case XRPC.procedure(client, "com.atproto.server.createSession", body: body) do {:ok, body} -> ATProto.Session.new(body) result -> result end end # com.atproto.repo (https://atproto.com/lexicons/com-atproto-repo) @doc """ Create a new record. """ def create_record(client, repo, collection, record) do record = %{createdAt: DateTime.utc_now() |> DateTime.to_iso8601()} |> Map.merge(Enum.into(record, %{})) body = %{collection: collection, repo: repo, record: record} |> Jason.encode!() XRPC.procedure(client, "com.atproto.repo.createRecord", body: body) end @doc """ Get information about the repo, including the list of collections. """ def describe_repo(client, repo) do params = [repo: repo] XRPC.query(client, "com.atproto.repo.describeRepo", params: params) end @doc """ Get a record. """ def get_record(client, repo, collection, rkey, params \\ []) do params = [repo: repo, collection: collection, rkey: rkey] |> Keyword.merge(params) XRPC.query(client, "com.atproto.repo.getRecord", params: params) end @doc """ List a range of records in a collection. """ def list_records(client, repo, collection, params \\ []) do params = [repo: repo, collection: collection] |> Keyword.merge(params) XRPC.query(client, "com.atproto.repo.listRecords", params: params) end end