This repository was archived by the owner on Jun 19, 2026. It is now read-only.
v1.1.0 — Delete Message + RTL + Security Fixes
What's New in v1.1.0
New Features
Delete Message
WhatsApp-style delete confirmation modal — right-click any message or use the multi-select toolbar.
- Delete for everyone — unsends the message for all participants (only available for your own sent messages, within ~60 hours). Calls
DELETE /message/delete/. - Delete for me — removes the message from your local view only. Calls
DELETE /message/deleteMessage/(best-effort; always removes locally). - Modal auto-dismisses when switching or closing conversations.
- Escape key closes the modal.
- Error toast shown if any message in a batch could not be deleted.
RTL / LTR Auto-Direction
Hebrew, Arabic, and other RTL text now renders correctly in every part of the UI. English stays left-to-right. No configuration needed — dir="auto" is applied per element, so mixed conversations work naturally.
Bug Fixes
Security
- XSS: avatar
onerrorno longer usesinnerHTMLwith unescaped text - XSS:
quotedMsg.idsanitised before embedding inonclickattribute - XSS: image lightbox uses
data-srcinstead of raw URL in inline handler - XSS: group name, subject, and description now escaped with
chatEsc()
Crashes
chatState.allFetchedMessageswas uninitialised — fixed with[]default- Location messages crashed on null
m.text - Location coordinates were not URL-encoded before being put into a Maps URL
FileReaderbase64 split did not guard against a missing comma
API
chatApiCallwas silently dropping the request body onDELETEcalls — Evolution API delete endpoints require a JSON body
Lifecycle
- Delete modal not dismissed on conversation switch → wrong JID could be used
- Delete modal not dismissed when closing a conversation
chatCloseConversationdid not reset select mode state- Both confirm functions now guard against
activeJidbeingnull
UI / State
- Select toolbar delete button used a fragile attribute CSS selector; replaced with a stable
id - Delete button started enabled before first
chatUpdateSelectCountcall chatCopySelected/chatForwardSelected/chatDeleteSelecteduseSet.has()instead ofArray.includes()
Full Changelog
See CHANGELOG.md for the complete history.