# proto_rune v0.2.0 - Table of Contents

> ATProtocol and Bluesky SDK and Bot framework for Elixir

## Pages

- Guides
  - [Getting Started with ProtoRune](getting-started.md)
  - [Authentication](authentication.md)
  - [Posting Content](posting-content.md)
  - [Bot Development](bot-development.md)
  - [Repository Operations (Advanced)](repository-operations.md)
  - [Understanding XRPC and Low-Level API Usage](xrpc.md)

- Development
  - [ProtoRune](readme.md)
  - [Contributing to ProtoRune](contributing.md)
  - [LICENSE](license.md)

## Modules

- [ProtoRune](ProtoRune.md): Main API for ProtoRune - Elixir SDK for AT Protocol.
- [ProtoRune.Atproto.Identity](ProtoRune.Atproto.Identity.md): Implements AT Protocol identity management operations.
- [ProtoRune.Atproto.Identity.Behaviour](ProtoRune.Atproto.Identity.Behaviour.md): Defines the behaviour for AT Protocol identity management operations.
- [ProtoRune.Atproto.Identity.Cache](ProtoRune.Atproto.Identity.Cache.md): Provides caching for AT Protocol identity resolution results.
- [ProtoRune.Atproto.Identity.DIDResolver](ProtoRune.Atproto.Identity.DIDResolver.md): Handles DID resolution for AT Protocol identities.
- [ProtoRune.Atproto.Identity.HandleResolver](ProtoRune.Atproto.Identity.HandleResolver.md): Handles AT Protocol handle resolution to DIDs through DNS and HTTPS methods.
- [ProtoRune.Atproto.Repo](ProtoRune.Atproto.Repo.md): Low-level `com.atproto.repo` operations.
- [ProtoRune.Atproto.Session](ProtoRune.Atproto.Session.md): An authenticated AT Protocol session.
- [ProtoRune.Bot](ProtoRune.Bot.md): The `ProtoRune.Bot` module provides the foundational behavior and macros for building bots
in the ProtoRune ecosystem. It defines the basic structure for bots and ensures that every bot
adheres to a consistent interface, with customizable event handling, identifier, and password
retrieval.
- [ProtoRune.Bot.Poller](ProtoRune.Bot.Poller.md): A GenServer module that handles periodic polling of notifications for a bot, and dispatches
these notifications to the appropriate handler functions within the bot.
- [ProtoRune.Bot.Server](ProtoRune.Bot.Server.md): The `ProtoRune.Bot.Server` module is responsible for managing bot processes in ProtoRune.
It handles bot initialization, session management, and event/message dispatching. This
module also integrates with the polling system to retrieve real-time notifications from
ATProto and Bluesky services.
- [ProtoRune.Bsky](ProtoRune.Bsky.md): High-level Bluesky API helpers.
- [ProtoRune.Case](ProtoRune.Case.md): Yeah, in house string casing

- [ProtoRune.Config](ProtoRune.Config.md): The `ProtoRune.Config` module provides configuration options for the ProtoRune library.

- [ProtoRune.HTTPClient](ProtoRune.HTTPClient.md): The `HTTPClient` module handles HTTP requests to external services. It provides a simple interface for making GET and POST requests and handling responses.

- [ProtoRune.HTTPClient.Adapter](ProtoRune.HTTPClient.Adapter.md): The `HTTPClient.Adapter` module provides an adapter interface for HTTP clients. It defines the behaviour that must be implemented by any HTTP client adapter.

- [ProtoRune.HTTPClient.Adapters.Req](ProtoRune.HTTPClient.Adapters.Req.md): The `HTTPClient.Adapters.Req` module provides an adapter for the Req library. It implements the `HTTPClient.Adapter` behaviour and defines the `request/3` function to make HTTP requests using Req.

- [ProtoRune.Lexicon](ProtoRune.Lexicon.md): Type definitions for the Intermediate Representation (IR) of AT Protocol Lexicons.
This structure serves as a bridge between raw lexicon JSON and generated Elixir code.

- [ProtoRune.Lexicon.Generator](ProtoRune.Lexicon.Generator.md): Generates Elixir modules with Peri schemas from AT Protocol lexicon definitions.
- [ProtoRune.Lexicon.TypeMapper](ProtoRune.Lexicon.TypeMapper.md): Maps ATProto lexicon types to Peri schema types.
- [ProtoRune.RichText](ProtoRune.RichText.md): Builder for AT Protocol rich text with facets.
- [ProtoRune.XRPC.Client](ProtoRune.XRPC.Client.md): The `XRPC.Client` module handles executing queries and procedures in the XRPC system. It interacts with external services through HTTP requests and performs response validation and schema parsing. The client supports both GET and POST requests, depending on whether the request is a query or a procedure.
- [ProtoRune.XRPC.Config](ProtoRune.XRPC.Config.md): Provides fallback configuration for XRPC when service URL is not explicit.

- [ProtoRune.XRPC.DSL](ProtoRune.XRPC.DSL.md): The `XRPC.DSL` module provides macros to define queries and procedures for interacting with the XRPC system, simplifying the creation of API methods for querying or performing procedures. It supports building custom XRPC queries and procedures by encoding method names and dynamically generating functions based on user-defined parameters.
- [ProtoRune.XRPC.Procedure](ProtoRune.XRPC.Procedure.md): The `XRPC.Procedure` module represents a procedure in the XRPC system, encapsulating the method name, request body, and a parser for validating the body. It provides functions to create and manipulate procedure structures.
- [ProtoRune.XRPC.Query](ProtoRune.XRPC.Query.md): The `XRPC.Query` module is responsible for defining and managing queries in the XRPC system. It encapsulates the method, parameters, headers, and an optional parser, providing functions to create and manipulate query structures.

## Mix Tasks

- [mix proto_rune.gen.lexicons](Mix.Tasks.ProtoRune.Gen.Lexicons.md): Generates Peri schema modules from ATProto lexicon JSON files.

