# `Tinkex.Telemetry.Reporter.Events`
[🔗](https://github.com/North-Shore-AI/tinkex/blob/v0.4.0/lib/tinkex/telemetry/reporter/events.ex#L1)

Event building for different telemetry event types.

Responsible for constructing typed event structs (GenericEvent, SessionStartEvent,
SessionEndEvent, UnhandledExceptionEvent) with proper indexing and timestamps.

# `build_exception_event`

```elixir
@spec build_exception_event(map(), Exception.t(), atom()) :: {term(), map()}
```

Build an exception event (either user error or unhandled exception).

Delegates to ExceptionHandler to determine the exception type and builds
the appropriate event.

Returns `{event, updated_state}` where session_index has been incremented.

# `build_generic_event`

```elixir
@spec build_generic_event(map(), String.t(), map(), atom()) ::
  {Tinkex.Types.Telemetry.GenericEvent.t(), map()}
```

Build a generic telemetry event.

Returns `{event, updated_state}` where session_index has been incremented.

# `build_session_end_event`

```elixir
@spec build_session_end_event(map()) ::
  {Tinkex.Types.Telemetry.SessionEndEvent.t(), map()}
```

Build a session end event with duration.

Returns `{event, updated_state}` where session_index has been incremented.

# `build_session_start_event`

```elixir
@spec build_session_start_event(map()) ::
  {Tinkex.Types.Telemetry.SessionStartEvent.t(), map()}
```

Build a session start event.

Returns `{event, updated_state}` where session_index has been incremented.

# `build_unhandled_exception`

```elixir
@spec build_unhandled_exception(map(), Exception.t(), atom()) ::
  {Tinkex.Types.Telemetry.UnhandledExceptionEvent.t(), map()}
```

Build an unhandled exception event.

Returns `{event, updated_state}` where session_index has been incremented.

# `build_user_error_event`

```elixir
@spec build_user_error_event(map(), Exception.t()) ::
  {Tinkex.Types.Telemetry.GenericEvent.t(), map()}
```

Build a user error event (as a generic event with warning severity).

Returns `{event, updated_state}` where session_index has been incremented.

# `enqueue_session_start`

```elixir
@spec enqueue_session_start(map()) :: {map(), boolean()}
```

Enqueue a session start event.

Returns `{updated_state, accepted?}`.

# `maybe_enqueue_session_end`

```elixir
@spec maybe_enqueue_session_end(map()) :: map()
```

Maybe enqueue a session end event if not already enqueued.

Returns updated_state.

# `severity_for_event`

```elixir
@spec severity_for_event(list()) :: atom()
```

Determine severity for a telemetry event based on event name.

---

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