Skip to content

v0.10.10

Choose a tag to compare

@rmyndharis rmyndharis released this 24 Jul 18:11

Added

  • Text statuses keep their posted look. The background color and font of a text status are now
    captured on ingest (from the Baileys engine, which carries them on the wire) and rendered in the
    dashboard viewer — colored bubble with white text and an approximated font family — instead of
    every text story looking identical. The fields already existed on the API and SDK StatusRecord
    shapes; whatsapp-web.js does not expose styling, so statuses from that engine render as before.

  • New statuses now appear in the dashboard in real time. A freshly ingested contact status is
    broadcast over the websocket as status.received (same payload as the webhook), and the Status
    tab refreshes immediately instead of waiting for a focus refetch — including while a contact's
    viewer is already open.

Changed

  • Status font selection now follows the real WhatsApp font enum. POST /sessions/:id/status/send-text accepts the font indices that actually exist on the wire — 0
    (default), 1, 2, 6 (system bold), 7, 8, 9, 10 — instead of a 0–5 range that included
    non-existent indices 3–5 and rejected the valid 6–10. The dashboard viewer renders the full
    enum (bold/script/serif/mono slots approximated with generic families), and the compose
    dropdown offers the same set.

Fixed

  • Backup restores no longer drop group sender attribution. The data import now carries the
    author column (the export already wrote it), so a backup→restore keeps each group message's
    stable sender identity instead of collapsing attribution back to display names.

  • Group messages now carry a stable sender identity, so same-named participants no longer blur
    together.
    Group messages persist the participant JID (new author column on messages) next
    to the sender's display name, and the dashboard keys attribution runs and sender colors on that
    identity instead of the name — two participants who share a pushName now get separate runs in
    distinct colors instead of collapsing into one misattributed thread. Live, history-backfilled,
    and websocket-delivered messages all carry it; legacy rows fall back to name-keying.

  • Contacts with both a @lid and a phone identity now appear once in the status list. Statuses
    arriving under a contact's @lid are resolved to their phone at read time — including mappings
    learned after the status arrived — so the same person no longer shows as two rows, and the
    per-contact endpoint matches rows stored under either form.

  • The status seed no longer downloads media the store would discard. Media downloads during the
    connect-time backfill are pre-gated at the store's own 10 MB cap instead of the looser global
    media cap, so an over-cap blob is marked omitted without ever being fetched.

  • Status store hardening. A @lid query on the per-contact status endpoint now also matches
    rows stored under the contact's phone (forward resolution, mirroring the reverse); lid
    resolution is guarded to @lid inputs so a phone-shaped JID can never collide with a lid key;
    media skipped by the seed's download pre-gate is recorded as over_cap rather than
    engine_omitted; and a status ingest that finishes after its session was deleted no longer
    dispatches status.received for the retired session.

  • History backfill no longer marks the account's own posts. Backfilled outgoing group messages
    are stored with author NULL, keeping the column's "null on outgoing" contract the attribution
    logic relies on.

  • Dashboard follow-through. A websocket reconnect now also refreshes the statuses list (a
    story posted during the gap previously stayed invisible until a window-focus refetch); the
    webhook editor offers status.received as an explicit subscription; and a styled status
    bubble's timestamp inherits the bubble's text color instead of staying muted gray.