XRPC

April 28, 2023 ยท View on GitHub

Implementation of the XRPC client spec in Elixir.

Installation

The package can be installed by adding xrpc to your list of dependencies in mix.exs:

def deps do
  [
    {:xrpc, "~> 0.1.0"}
  ]
end

The docs can be found at https://hexdocs.pm/xrpc.

Usage

Non-authenticated example:

XRPC.Client.new("https://bsky.social")
|> XRPC.query("com.atproto.identity.resolveHandle", params: [handle: "atproto.com"])

{:ok, %{"did" => "did:plc:ewvi7nxzyoun6zhxrhs64oiz"}}

Authenticated example:

access_token = "abcd1234"
XRPC.Client.new("https://bsky.social", access_token)
|> XRPC.query("app.bsky.actor.getProfile", params: [actor: "atproto.com"])

{:ok,
  %{
    "avatar" =>
      "https://cdn.bsky.social/imgproxy/EoCjH1lIwK1YNFuG_xYYK76vuHhEAQKWAkzlz8BSO_Q/rs:fill:1000:1000:1:0/plain/bafkreibjfgx2gprinfvicegelk5kosd6y2frmqpqzwqkg7usac74l3t2v4@jpeg",
    "banner" =>
      "https://cdn.bsky.social/imgproxy/Goxx1Ze2lScFMdlEXE0pVTzXBxsIuwbdxhYkWo1CVUA/rs:fill:3000:1000:1:0/plain/bafkreib4xwiqhxbqidwwatoqj7mrx6mr7wlc5s6blicq5wq2qsq37ynx5y@jpeg",
    "description" => "Social networking technology created by Bluesky.",
    "did" => "did:plc:ewvi7nxzyoun6zhxrhs64oiz",
    "displayName" => "AT Protocol",
    "followersCount" => 1878,
    "followsCount" => 11,
    "handle" => "atproto.com",
    "postsCount" => 10,
    ...
  }}

Example error:

XRPC.Client.new("https://bsky.social")
|> XRPC.query("app.bsky.actor.getProfile", params: [actor: "atproto.com"])

{:error, %{"error" => "AuthenticationRequired", "message" => "Authentication Required"}}