# `Chronicle.EventStoreSubscriptions.Subscription`
[🔗](https://github.com/Cratis/Chronicle.Elixir/blob/main/lib/chronicle/event_store_subscriptions/subscription.ex#L4)

Behaviour and macro for defining discoverable Chronicle event store subscriptions.

Discoverable subscriptions follow the same pattern as reactors and webhooks:
metadata is captured at compile time and exposed through
`__chronicle_event_store_subscription__/1`.

## Usage

    defmodule MyApp.EventStoreSubscriptions.DefaultAccountEvents do
      use Chronicle.EventStoreSubscriptions.Subscription,
        source_event_store: "default"

      alias Chronicle.EventStoreSubscriptions.DefinitionBuilder

      @impl true
      def define(builder) do
        builder
        |> DefinitionBuilder.with_event_type(MyApp.Events.AccountOpened)
        |> DefinitionBuilder.with_event_type(MyApp.Events.FundsDeposited)
      end
    end

Options for `use Chronicle.EventStoreSubscriptions.Subscription`:

  * `:source_event_store` — **required** source event store name
  * `:id` — stable subscription identifier. Defaults to the module name.

# `define`

```elixir
@callback define(Chronicle.EventStoreSubscriptions.DefinitionBuilder.t()) ::
  Chronicle.EventStoreSubscriptions.DefinitionBuilder.t()
```

---

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