Amarula.Config (amarula v0.1.0)

View Source

Connection config + the single source of truth for protocol/connection defaults.

There are two kinds of configuration:

1. Per-connection config — passed to Amarula.new/1

A map; you supply only what differs (at minimum :profile), merge/1 fills the rest from the defaults below.

KeyDefaultMeaning
:profile— (required)names + scopes this account's stored state

| :storage | {Amarula.Storage.File, root: AMARULA_DATA_DIR || "./amarula_data"} | storage backend {module, opts} | | :retry_cache | ETS (see Amarula.RetryCache) | sent-message cache backend | | :registry | Amarula.ProfileRegistry (local) | {module, name} or bare name for the profile→connection registry; swap for Horde.Registry to enforce one-conn-per-profile cluster-wide (default: per node). See Amarula.ProfileRegistry | | :auth | loaded from storage | explicit creds (advanced; normally Amarula loads/persists these itself) | | :version | [2, 3000, 1035194821] | WhatsApp Web protocol version — MUST track src/Defaults/index.ts or the handshake is rejected. (Distinct from Baileys source parity — see Amarula.Baileys / docs/PARITY.md.) | | :browser | ["Mac OS", "Chrome", "14.4.1"] | browser triple shown as the linked device | | :max_retries | 5 | reconnect attempts | | :retry_delay | 1000 | base reconnect backoff (ms) | | :connect_timeout_ms | 30_000 | WebSocket connect timeout | | :keep_alive_interval_ms | 30_000 | WA-level keep-alive ping interval | | :sync_full_history | true | request full history on link | | :mark_online_on_connect | true | send presence available on connect | | :fire_init_queries | true | run the post-login init IQ queries | | :country_code | "US" | | | :headers / :origin / :agent | see defaults | HTTP/WS handshake |

Amarula.new(%{profile: :me, sync_full_history: false}) |> Amarula.connect()

2. App-global config — config :amarula, ...

Only the pluggable seams (apply to every connection that doesn't override them):

config :amarula, :default_storage_adapter, Amarula.Storage.File
config :amarula, :retry_cache_adapter, Amarula.RetryCache.ETS

Logging

Amarula logs through Elixir's Logger. Almost everything is :debug; only connection lifecycle, pairing, and errors are :info/:warning/:error. To keep your dev console clean, set the global level — or silence Amarula specifically without affecting your own logs:

# your app's config
config :logger, level: :info

# or, mute just Amarula (Elixir 1.13+):
Logger.put_module_level(Amarula.Connection, :warning)

Telemetry (Amarula.Telemetry) is the structured, log-independent way to observe Amarula in production.

Summary

Functions

The default config map (without :profile/:auth/:storage, which are caller-supplied).

Merge config over the defaults (caller values win).

Functions

defaults()

@spec defaults() :: map()

The default config map (without :profile/:auth/:storage, which are caller-supplied).

merge(config)

@spec merge(map()) :: map()

Merge config over the defaults (caller values win).