ExWapp.Message.Handler.Wire.ContentDecoder (ExWapp v0.1.2)

Copy Markdown View Source

Pure decoder for supported WhatsApp message content.

It decodes the E2E Message protobuf and maps supported content (text, media, location, contact, event) to the internal contract, but does not parse XML envelopes, decrypt Signal payloads, persist state, or publish events.

Summary

Functions

Adds decoded media, location, contact, or event fields to a message map.

Distinguishes protocol payloads from user content and extracts message text.

Decodes an E2E Message payload, returning :error on malformed protobuf.

Reports whether a message is a DeviceSentMessage wrapper (own-device fanout).

Functions

apply_media_from_message(message_data, message)

@spec apply_media_from_message(map(), WAWebProtobufsE2E.Message.t()) :: map()

Same as apply_media_from_plaintext/2 for an already-decoded message.

apply_media_from_plaintext(message_data, plaintext)

@spec apply_media_from_plaintext(map(), binary()) :: map()

Adds decoded media, location, contact, or event fields to a message map.

classify_decrypted_content(payload, sender_key_distribution_count)

@spec classify_decrypted_content(binary(), non_neg_integer()) ::
  {:protocol | :user_message, binary() | nil}

Distinguishes protocol payloads from user content and extracts message text.

classify_message(message, sender_key_distribution_count)

@spec classify_message(WAWebProtobufsE2E.Message.t(), non_neg_integer()) ::
  {:protocol | :user_message, binary() | nil}

Same as classify_decrypted_content/2 for an already-decoded message.

decode(payload)

@spec decode(binary()) :: {:ok, WAWebProtobufsE2E.Message.t()} | :error

Decodes an E2E Message payload, returning :error on malformed protobuf.

device_sent_message?(message)

@spec device_sent_message?(WAWebProtobufsE2E.Message.t() | term()) :: boolean()

Reports whether a message is a DeviceSentMessage wrapper (own-device fanout).