# Ithibati v0.2.0 - Table of Contents

> Passkey authentication for Elixir applications: accounts, WebAuthn credentials, recovery codes and revocable sessions. It has no opinion about what an account may do. The web half is optional and built for Phoenix.

## GUIDES

- Guides
  - [Ithibati](overview.md)
  - [Getting started](getting_started.md)
  - [Configuration and schemas](configuration.md)
  - [Registering and signing in](ceremonies.md)
  - [Passkeys](passkeys.md)
  - [Invitations and the first account](invitations.md)
  - [Recovery codes](recovery.md)

- Tooling
  - [Setup checks](doctor.md)
  - [Credo checks](credo.md)

- About
  - [Changelog](changelog.md)
  - [Licence](license.md)

## Modules

- [Ithibati](Ithibati.md): Passkey authentication for Elixir applications.

- Identity
  - [Ithibati.Identity.Grant](Ithibati.Identity.Grant.md): Adds an account's first passkey and recovery codes to an application's `Ecto.Multi`.
  - [Ithibati.Identity.Instance](Ithibati.Identity.Instance.md): Records the one-time claim of an instance by its first account.
  - [Ithibati.Identity.Invitations](Ithibati.Identity.Invitations.md): Finds pending invitations and composes their acceptance into application transactions.
  - [Ithibati.Identity.Passkeys](Ithibati.Identity.Passkeys.md): Registers and verifies passkeys and manages an account's stored credentials.
  - [Ithibati.Identity.RecoveryCodes](Ithibati.Identity.RecoveryCodes.md): Issues and redeems single-use recovery codes for accounts without an available passkey.
  - [Ithibati.Identity.Sessions](Ithibati.Identity.Sessions.md): Issues, looks up and revokes server-side sessions.

- Schemas
  - [Ithibati.Schema.Identifier](Ithibati.Schema.Identifier.md): Provides identifier normalization and built-in validation patterns.
  - [Ithibati.Schema.Invitation](Ithibati.Schema.Invitation.md): Adds invitation-token fields and validation to an application-owned schema.
  - [Ithibati.Schema.User](Ithibati.Schema.User.md): Adds an identifier and credential associations to an application-owned account schema.

- Phoenix
  - [Ithibati.Ceremony](Ithibati.Ceremony.md): Lists the failure-code vocabulary produced by Ithibati's server and browser integration.
  - [Ithibati.Web.Gate](Ithibati.Web.Gate.md): Loads the current account from a session and optionally requires authentication.
  - [Ithibati.Web.Handler](Ithibati.Web.Handler.md): Defines the application's decisions during registration, authentication and recovery.
  - [Ithibati.Web.Hooks](Ithibati.Web.Hooks.md): Exports the passkey browser hook through LiveView's colocated manifest.
  - [Ithibati.Web.PasskeyController](Ithibati.Web.PasskeyController.md): Handles the JSON endpoints mounted by `Ithibati.Web.Router`.
  - [Ithibati.Web.Router](Ithibati.Web.Router.md): Mounts registration, authentication and recovery endpoints in a Phoenix router.

- Rows this library owns
  - [Ithibati.Bootstrap](Ithibati.Bootstrap.md): Stores the one-time bootstrap claim and the account that made it.
  - [Ithibati.RecoveryCode](Ithibati.RecoveryCode.md): Stores a recovery code's digest, account reference and usage timestamp.
  - [Ithibati.Session](Ithibati.Session.md): Stores a session token's SHA-256 digest, account reference and creation time.
  - [Ithibati.UserKey](Ithibati.UserKey.md): Stores a passkey's credential ID, serialized public key, label and last-use timestamp.

- Setup and tooling
  - [Ithibati.Catalogue](Ithibati.Catalogue.md): Reads PostgreSQL table, column and uniqueness metadata.
  - [Ithibati.Config](Ithibati.Config.md): Reads and validates the application's Ithibati configuration.
  - [Ithibati.Doctor](Ithibati.Doctor.md): Checks configuration, database state and web integration without changing them.
  - [Ithibati.Migration](Ithibati.Migration.md): Creates or removes Ithibati's versioned database schema from an application migration.

- Credo checks
  - [Ithibati.Credo.NoDirectTableAccess](Ithibati.Credo.NoDirectTableAccess.md): ## Basics
  - [Ithibati.Credo.NoInternalCalls](Ithibati.Credo.NoInternalCalls.md): ## Basics
  - [Ithibati.Credo.NoWaxConfiguration](Ithibati.Credo.NoWaxConfiguration.md): ## Basics

## Mix Tasks

- Setup and tooling
  - [mix ithibati.doctor](Mix.Tasks.Ithibati.Doctor.md): Starts the consuming application, prints setup findings and fails if any check reports an error.

