# ExGram FSM v0.1.0 - API Reference

## Modules

- [ExGram.FSM.StorageInit](ExGram.FSM.StorageInit.md): `ExGram.BotInit` hook that initialises the FSM storage backend at bot startup.

- Core
  - [ExGram.FSM](ExGram.FSM.md): Finite State Machine / conversation state management for ExGram Telegram bots.
  - [ExGram.FSM.Flow](ExGram.FSM.Flow.md): Behaviour and DSL for declaring a named FSM conversation flow.
  - [ExGram.FSM.Helpers](ExGram.FSM.Helpers.md): Runtime helper functions for FSM flow and state management.
  - [ExGram.FSM.State](ExGram.FSM.State.md): Struct representing a user's FSM flow, state, and associated data.
  - [ExGram.FSM.States](ExGram.FSM.States.md): Behaviour for declaring FSM states and allowed transitions.

- Storage
  - [ExGram.FSM.Storage](ExGram.FSM.Storage.md): Behaviour for FSM state storage backends.
  - [ExGram.FSM.Storage.ETS](ExGram.FSM.Storage.ETS.md): Default in-memory FSM storage using ETS.

- Key Adapters
  - [ExGram.FSM.Key](ExGram.FSM.Key.md): Behaviour for extracting FSM storage keys from Telegram updates.
  - [ExGram.FSM.Key.Chat](ExGram.FSM.Key.Chat.md): FSM key: `{chat_id}`.
  - [ExGram.FSM.Key.ChatTopic](ExGram.FSM.Key.ChatTopic.md): FSM key: `{chat_id, thread_id}`.
  - [ExGram.FSM.Key.ChatTopicUser](ExGram.FSM.Key.ChatTopicUser.md): FSM key: `{chat_id, thread_id, user_id}`.
  - [ExGram.FSM.Key.ChatUser](ExGram.FSM.Key.ChatUser.md): Default FSM key: `{chat_id, user_id}`.
  - [ExGram.FSM.Key.User](ExGram.FSM.Key.User.md): FSM key: `{user_id}`.

- Filters
  - [ExGram.FSM.Filter.Flow](ExGram.FSM.Filter.Flow.md): An `ExGram.Router.Filter` that matches on the current active FSM flow name.
  - [ExGram.FSM.Filter.InFlow](ExGram.FSM.Filter.InFlow.md): An `ExGram.Router.Filter` that matches when any FSM flow is active.
  - [ExGram.FSM.Filter.State](ExGram.FSM.Filter.State.md): An `ExGram.Router.Filter` that matches on the current FSM state or FSM data.

- Internals
  - [ExGram.FSM.Middleware](ExGram.FSM.Middleware.md): ExGram middleware that loads FSM state before every handler call.
  - [ExGram.FSM.TransitionError](ExGram.FSM.TransitionError.md): Exception raised when an invalid FSM transition is attempted and the
`on_invalid_transition` policy is `:raise` (the default).

