Synctera.Webhook (Synctera v1.0.0)

Copy Markdown View Source

Verifies Synctera webhook deliveries, signed with HMAC-SHA256 over "#{timestamp}.#{body}" (docs: Webhooks guide). Supports two signatures during secret rotation and a configurable replay window.

Summary

Functions

Non-raising, non-error-tuple convenience wrapper: returns a plain boolean.

Verifies a webhook delivery. Returns :ok or {:error, %Synctera.WebhookSignatureError{}}.

Types

verify_opts()

@type verify_opts() :: [
  payload: binary(),
  signature_header: String.t(),
  timestamp_header: String.t(),
  secret: String.t(),
  previous_secret: String.t() | nil,
  tolerance_seconds: non_neg_integer(),
  now: (-> integer())
]

Functions

valid?(opts)

@spec valid?(verify_opts()) :: boolean()

Non-raising, non-error-tuple convenience wrapper: returns a plain boolean.

verify(opts)

@spec verify(verify_opts()) :: :ok | {:error, Synctera.WebhookSignatureError.t()}

Verifies a webhook delivery. Returns :ok or {:error, %Synctera.WebhookSignatureError{}}.

payload must be the raw request body exactly as received — do not decode it before verifying.

verify!(opts)

@spec verify!(verify_opts()) :: :ok

Like verify/1 but raises Synctera.WebhookSignatureError on failure.