Skip to content

Commit 04dd7f7

Browse files
erancybersecclaude
andcommitted
docs: backfill full CHANGELOG from v0.0.6 through v1.1.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent f411096 commit 04dd7f7

1 file changed

Lines changed: 123 additions & 22 deletions

File tree

CHANGELOG.md

Lines changed: 123 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ All notable changes to this project are documented here.
1010

1111
#### Delete Message
1212
- WhatsApp-style delete confirmation modal with three options:
13-
- **Delete for everyone** — calls Evolution API `DELETE /message/delete/`; only available when every selected message was sent by you (`fromMe`); works within ~60 hours of sending
13+
- **Delete for everyone** — calls `DELETE /message/delete/`; only available when every selected message was sent by you (`fromMe`); works within ~60 hours of sending
1414
- **Delete for me** — calls `DELETE /message/deleteMessage/` (best-effort); always removes the message from your local view regardless of API result
1515
- **Cancel** — dismisses without action
1616
- Available from the **right-click context menu** (single message) and the **select-mode toolbar** (multi-message batch delete)
@@ -26,11 +26,10 @@ All notable changes to this project are documented here.
2626
### Bug Fixes
2727

2828
#### Security
29-
- **XSS** — avatar `onerror` attribute no longer uses `innerHTML` with unescaped initials; switched to sibling-element show/hide pattern
30-
- **XSS**`quotedMsg.id` is now sanitised (`/[^a-zA-Z0-9_-]/g`) before being embedded in `onclick`
31-
- **XSS** — image lightbox `onclick` now reads URL from `data-src` attribute instead of embedding the raw URL in the inline handler string
32-
- **XSS** — group name, subject, and description now escaped with `chatEsc()` in all render paths
33-
- Group description snippet in group manager now escaped
29+
- XSS — avatar `onerror` attribute no longer uses `innerHTML` with unescaped initials; switched to sibling-element show/hide pattern
30+
- XSS — `quotedMsg.id` is now sanitised (`/[^a-zA-Z0-9_-]/g`) before being embedded in `onclick`
31+
- XSS — image lightbox `onclick` now reads URL from `data-src` attribute instead of embedding the raw URL in the inline handler string
32+
- XSS — group name, subject, and description now escaped with `chatEsc()` in all render paths
3433

3534
#### Crashes / Runtime Errors
3635
- `chatState.allFetchedMessages` was not initialised in the state object — accessing it before the first conversation opened threw `TypeError`
@@ -39,16 +38,16 @@ All notable changes to this project are documented here.
3938
- `FileReader` base64 result was indexed with `[1]` without checking that a comma was present in the data URL
4039

4140
#### API
42-
- `chatApiCall` was silently dropping the request body on `DELETE` calls — the Evolution API delete endpoints require a JSON body, so deletes were failing with 400/422 errors
41+
- `chatApiCall` was silently dropping the request body on `DELETE` calls — the Evolution API delete endpoints require a JSON body, so deletes were failing
4342

4443
#### Lifecycle
45-
- Delete modal was not dismissed when switching conversations — the wrong `remoteJid` (new conversation's JID) would be used if the user confirmed deletion after switching
44+
- Delete modal was not dismissed when switching conversations — the wrong `remoteJid` (new conversation's JID) could be used if the user confirmed deletion after switching
4645
- Delete modal was not dismissed when closing a conversation
4746
- `chatCloseConversation` did not reset `selectMode`, `selectedMsgs`, or the toolbar visibility
4847
- `chatConfirmDeleteForEveryone` and `chatConfirmDeleteForMe` now guard against `activeJid` being `null`
4948

5049
#### UI / State
51-
- Select-mode toolbar delete button used a fragile `[onclick="..."]` CSS attribute selector to find itself; replaced with a stable `id`
50+
- Select-mode toolbar delete button used a fragile `[onclick="..."]` CSS attribute selector; replaced with a stable `id`
5251
- Delete button incorrectly started in an enabled state before `chatUpdateSelectCount` ran; now starts `disabled` in HTML
5352
- `chatCopySelected` and `chatForwardSelected` used `Array.includes()` (O(n)) to filter selected messages; replaced with `Set.has()` (O(1))
5453
- Quoted message text defaulted to `undefined` if `m.quotedMsg.text` was missing; now defaults to `''`
@@ -58,22 +57,124 @@ All notable changes to this project are documented here.
5857
## [1.0.1] — 2026-04-07
5958

6059
### Bug Fixes
61-
- Fixed scroll-up pagination to correctly load older messages from the API
62-
- Ghost unread indicators no longer appear after marking chats as read
60+
- Fixed scroll-up pagination to correctly load older messages from the API — scroll position now preserved when prepending older messages
61+
- Ghost unread indicators on groups cleared optimistically before the API markRead call
62+
- Fixed stale-JID race in `chatPollMessages`, `chatFetchOlderFromApi`, and `chatSendMediaMsg`
63+
- Fixed double-send race with `_sending` lock and `finally`-block release
64+
- Fixed `chatMarkRead` to use per-message `remoteJid` instead of the conversation JID
65+
- Added `visibilitychange` listener for immediate refresh when the tab regains focus
6366

6467
---
6568

6669
## [1.0.0] — 2026-04-05
6770

71+
### New Features — Chat Inbox
72+
Full WhatsApp-style chat inbox merged in from the `whatsapp-chat-feature` branch.
73+
74+
- Conversation list with avatar, name, last message preview, unread badge, and timestamp
75+
- Real-time polling — new messages every 3 s, conversation list every 30 s
76+
- Message bubbles for all types: text, image, video, audio, document, sticker, location, contact, poll, reactions
77+
- Read receipts — double blue ticks via `MessageUpdate` status history array (SERVER_ACK → DELIVERY_ACK → READ → PLAYED)
78+
- Reply — quote any message in your reply
79+
- React — send emoji reactions
80+
- Select mode — multi-select messages to copy or forward
81+
- Drag-and-drop reordering of queued messages in Compose and Group Broadcast
82+
- Persistent unread badges — survive page refresh via `localStorage`
83+
- Group name resolution — `verifiedName``subject` → fallback; persisted to avoid re-fetching
84+
85+
---
86+
87+
## [0.1.3] — 2026-03-20
88+
89+
### New Features
90+
- **Scheduled Sending** — schedule any Compose or Group Broadcast job to send at a future date/time
91+
- New **Scheduled** sidebar tab with live pending-job badge
92+
- Job cards show status, scheduled time, type, recipients, result, and a cancel button
93+
- 30-second background poller executes jobs automatically while the tab is open
94+
- API Response bar hidden on Scheduled and Profile Settings tabs (irrelevant there)
95+
96+
### Bug Fixes
97+
- Removed stray `</div>` that was closing the scroll container prematurely
98+
- Forced tab panel visibility with inline style to fix intermittent rendering glitch
99+
- Fixed missing closing div before the response panel
100+
- Reset scroll position to top when switching tabs
101+
102+
---
103+
104+
## [0.1.2] — 2026-03-15
105+
106+
### New Features
107+
- **Group Broadcast Queue** — Groups › Browse & Send now uses the same multi-card message sequence builder as the Compose tab
108+
- Groups can receive sequences of Text, Media, Voice, Poll, and Buttons messages in one broadcast
109+
- Broadcast button shows live totals: "Broadcast 3 messages to 5 groups (15 sends)"
110+
- Validation runs upfront before any sends begin
111+
112+
### Improvements
113+
- Scheduled jobs: clicking a card body now toggles the details panel
114+
- Scheduled jobs: uniform button widths
115+
- Group list max-height increased to 60 vh
116+
117+
---
118+
119+
## [0.1.1] — 2026-03-10
120+
121+
### New Features
122+
- **Message Queue Builder** in Compose tab — add multiple message cards of different types (Text, Media, Voice, Poll, Buttons) and send them as a sequence to all recipients
123+
- Each card is independently configurable and removable
124+
- Send button shows live totals and validates all cards before sending
125+
- Default text card loaded on page open
126+
127+
### Improvements
128+
- Accept numeric dial prefix in country code field (e.g. `972`, `44`) in addition to ISO codes
129+
- Allow manual country code input in Settings
130+
131+
---
132+
133+
## [0.1.0] — 2026-03-05
134+
135+
### New Features
136+
- **Compose Tab** — unified multi-type, multi-recipient sending panel
137+
- Chip-based recipient input — type a number and press Enter/comma; bulk-paste supported
138+
- Message types: Text, Media (image/video/document), Voice Note, Location, Contact, Reaction, Poll, Buttons, List, Status/Story
139+
- Randomized delay between sends (configurable min/max seconds)
140+
- Phone number validation and E.164 normalisation via libphonenumber-js
141+
142+
---
143+
144+
## [0.0.9] — 2026-02-28
145+
146+
### New Features
147+
- **File Upload** — Media and Audio tabs now support "Choose file from computer" alongside URL input
148+
- Files are read as base64 via `FileReader` and sent directly to the Evolution API
149+
- Auto-fills MIME type and filename from the selected file
150+
- Green badge shows the selected filename; cleared if a URL is typed instead
151+
152+
---
153+
154+
## [0.0.8] — 2026-02-20
155+
156+
### New Features
157+
- **`config.json` support** — when hosted on a web server, pre-configure all settings centrally; users skip the Settings modal entirely
158+
- `serverCfg` takes priority over `localStorage` for all fields
159+
- Settings modal shows a notice when a server config is active
160+
- `config.example.json` template added; `config.json` is gitignored
161+
162+
---
163+
164+
## [0.0.7] — 2026-02-15
165+
166+
### Improvements
167+
- Configurable **Business / App Name** — removes all hardcoded "Studio Shimshi" references
168+
- App name stored in `localStorage`; updates page title and header dynamically
169+
- README added with setup instructions and feature overview
170+
171+
---
172+
173+
## [0.0.6] — 2026-02-10
174+
68175
### Initial Release
69-
- Full chat inbox with conversation list and real-time polling
70-
- Message types: text, image, video, audio, document, sticker, location, contact, poll, reactions
71-
- Read receipts (double blue ticks) via `MessageUpdate` status history
72-
- Select mode with copy and forward
73-
- Drag-and-drop reordering of message queues
74-
- Compose panel: text, media, voice note, location, contact, reaction, poll, buttons, list, status/story
75-
- Group management: browse, create, manage participants and settings
76-
- Bulk sending with randomized delay
77-
- Scheduled sending with IndexedDB persistence
78-
- Phone number validation and E.164 normalisation
79-
- `config.json` support for server-hosted deployments
176+
- Messaging: Text, Media, Audio, Location, Contact, Reaction, Poll, Buttons, List, Status/Story
177+
- Groups: browse, broadcast, create, manage participants and settings
178+
- Phone number validation via libphonenumber-js; E.164 normalisation
179+
- Randomized delay between bulk sends
180+
- `localStorage`-only config — no hardcoded credentials

0 commit comments

Comments
 (0)