# `Chronicle.Artifacts`
[🔗](https://github.com/Cratis/Chronicle.Elixir/blob/main/lib/chronicle/artifacts.ex#L4)

Discovers Chronicle artifacts in an OTP application.

Discovery is based on the introspection functions generated by Chronicle
macros:

  * `__chronicle_event_type__/1`
  * `__chronicle_event_source__/1`
  * `__chronicle_reactor__/1`
  * `__chronicle_reducer__/1`
  * `__chronicle_read_model__/1`
  * `__chronicle_webhook__/1`
  * `__chronicle_event_store_subscription__/1`
  * `__chronicle_migration__/1`
  * `__chronicle_global_handler__/1`
  * `__chronicle_constraint__/1`

The returned map can be fed directly into `Chronicle.Client` options.

# `discovered`

```elixir
@type discovered() :: %{
  event_types: [module()],
  event_sources: [module()],
  reactors: [module()],
  reducers: [module()],
  read_models: [module()],
  projections: [module()],
  seeders: [module()],
  webhooks: [module()],
  event_store_subscriptions: [module()],
  captures: [module()],
  migrations: [module()],
  global_handlers: [module()],
  constraints: [module()]
}
```

# `discover`

```elixir
@spec discover(atom()) :: discovered()
```

Discovers Chronicle artifacts from modules belonging to an OTP app.

Returns empty lists if the app has no module list available.

# `discover_loaded`

```elixir
@spec discover_loaded() :: discovered()
```

Discovers Chronicle artifacts from all currently loaded modules.

Useful as a zero-configuration default in early adoption scenarios.

# `report`

```elixir
@spec report(atom(), keyword()) :: Chronicle.Discovery.Report.t()
```

Builds a `Chronicle.Discovery.Report` from the artifacts discovered in an OTP application.

Additive alongside `discover/1`, which keeps returning its plain map unchanged so existing
callers are unaffected. `opts` accepts `:warn_defaulted_ids` (default `true`); see
`Chronicle.Discovery.Report.build/1`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
