# `ExWapp.Session.Outbound.Encryptor`
[🔗](https://github.com/elchemista/ex_wapp/blob/v0.1.5/lib/ex_wapp/session/outbound/encryptor.ex#L1)

Encrypts one outbound payload for all resolved target devices.

This module owns Signal JID aliases, target accumulation, prekey wire
diagnostics, fanout coverage checks, and retry-session invalidation. It does
not build message payloads, send transport nodes, or persist chat state.

# `encrypted_payloads`

```elixir
@type encrypted_payloads() ::
  ExWapp.Session.Outbound.Direct.payloads() | %{recipient: binary()}
```

# `prekey_bundle_map`

```elixir
@type prekey_bundle_map() :: %{optional(String.t()) =&gt; map()}
```

# `result`

```elixir
@type result() ::
  {:ok, [ExWapp.Binary.Node.t()], ExWapp.Signal.SessionStore.t(), boolean()}
  | {:error, {:no_encrypted_targets, [{String.t(), term()}]}}
```

# `target_spec`

```elixir
@type target_spec() :: %{jid: String.t(), payload_kind: atom()}
```

# `clear_sessions_for_targets`

```elixir
@spec clear_sessions_for_targets(
  ExWapp.Signal.SessionStore.t(),
  [target_spec() | String.t()],
  ExWapp.Store.t()
) :: ExWapp.Signal.SessionStore.t()
```

Clears cached Signal sessions for retry targets and their PN/LID aliases.

# `encrypt_for_targets`

```elixir
@spec encrypt_for_targets(
  ExWapp.Store.t(),
  ExWapp.Signal.SessionStore.t(),
  [target_spec()],
  encrypted_payloads(),
  prekey_bundle_map()
) :: result()
```

Encrypts the selected payload independently for every target device.

# `missing_expected_targets`

```elixir
@spec missing_expected_targets([target_spec()], [ExWapp.Binary.Node.t()]) :: [
  target_spec()
]
```

Returns target specs that do not have a corresponding encrypted participant node.

---

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