Commit Graph

60 Commits

Author SHA1 Message Date
744ded914d realtime: emit and handle chat_deleted for full chat removals
All checks were successful
CI / test (push) Successful in 38s
2026-03-08 19:41:49 +03:00
a896568c53 realtime(chats): update subscriptions on delete/leave chat actions
All checks were successful
CI / test (push) Successful in 41s
2026-03-08 19:40:03 +03:00
fb812c9a39 auth(2fa): add one-time recovery codes with regenerate/status APIs
All checks were successful
CI / test (push) Successful in 40s
2026-03-08 19:16:15 +03:00
d069ff1121 auth(2fa): block setup after enable to avoid secret reissue
All checks were successful
CI / test (push) Successful in 43s
2026-03-08 19:07:20 +03:00
1c9855b34c auth: force disconnect realtime on revoke-all sessions
All checks were successful
CI / test (push) Successful in 26s
2026-03-08 19:04:23 +03:00
db700bcbcd moderation: add chat bans for groups/channels with web actions
All checks were successful
CI / test (push) Successful in 26s
2026-03-08 14:29:21 +03:00
76cc5e0f12 privacy/security: add PM privacy levels and improve session visibility
All checks were successful
CI / test (push) Successful in 24s
2026-03-08 14:26:19 +03:00
33e467d2a5 p1: add forward without author option
All checks were successful
CI / test (push) Successful in 21s
2026-03-08 14:11:04 +03:00
9b3b404993 p0: harden realtime reconciliation and revoke-all token invalidation
All checks were successful
CI / test (push) Successful in 23s
2026-03-08 14:04:11 +03:00
bc9d943d11 chats: add chat avatars and profile view-only modal
All checks were successful
CI / test (push) Successful in 23s
2026-03-08 13:53:29 +03:00
5d69d53301 feat(threads): support nested replies in thread API and panel
All checks were successful
CI / test (push) Successful in 31s
2026-03-08 13:40:42 +03:00
c6e8b779b0 feat(threads): add basic message thread API and web thread panel
All checks were successful
CI / test (push) Successful in 21s
2026-03-08 13:37:53 +03:00
c214cc8fd8 feat(privacy): enforce avatar/presence visibility and invite restrictions 2026-03-08 13:32:20 +03:00
041f7ac171 feat(messages): limit message edit window to 7 days
All checks were successful
CI / test (push) Successful in 25s
2026-03-08 13:20:51 +03:00
13b5f5b855 feat(realtime): sync message edits and deletes instantly 2026-03-08 13:17:09 +03:00
d2dd9aa01b feat(chat): add in-message attachments gallery and multi-file send
All checks were successful
CI / test (push) Successful in 19s
2026-03-08 13:06:00 +03:00
82322c4d42 fix(realtime,ui): sync message deletes and channel delete/leave behavior
All checks were successful
CI / test (push) Successful in 23s
2026-03-08 12:52:31 +03:00
30169a3a27 feat: add waveform voice messages end-to-end
All checks were successful
CI / test (push) Successful in 23s
2026-03-08 12:40:49 +03:00
8689283e99 fix: persist message delivery status across server restarts
All checks were successful
CI / test (push) Successful in 21s
2026-03-08 12:27:54 +03:00
0594b890c3 feat: mentions badge in chat list and muted-mention delivery
All checks were successful
CI / test (push) Successful in 21s
2026-03-08 12:23:39 +03:00
79baadb522 feat(auth,privacy,web): step-by-step login, privacy settings persistence, TOTP QR, and API docs
Some checks failed
CI / test (push) Failing after 22s
2026-03-08 12:09:53 +03:00
cbd1b008bb feat(contacts): switch contacts UX to email-first flow
Some checks failed
CI / test (push) Failing after 18s
- expose email in user search/contact responses

- add add-contact-by-email API endpoint

- show email in contacts/search and add contact form by email in Contacts tab
2026-03-08 11:51:02 +03:00
897defc39d fix(audio,sessions): unify audio playback state and improve session discovery
Some checks failed
CI / test (push) Failing after 18s
- move voice/audio players to single global audio engine with shared volume

- stop/reset previous track when switching to another media

- keep playback alive across chat switches via global audio element

- list refresh sessions by redis scan fallback when user session set is missing
2026-03-08 11:48:13 +03:00
27d3340a37 feat(auth): add TOTP 2FA setup and login verification
Some checks failed
CI / test (push) Failing after 21s
- add user twofa fields and migration

- add 2FA setup/enable/disable endpoints

- enforce OTP on login when 2FA enabled

- add web login OTP field and settings UI
2026-03-08 11:43:51 +03:00
e685a38be6 feat(auth): add active sessions management
Some checks failed
CI / test (push) Failing after 33s
- store refresh session metadata in redis (ip/user-agent/created_at)

- add auth APIs: list sessions, revoke one, revoke all

- add web privacy UI for active sessions
2026-03-08 11:41:03 +03:00
da73b79ee7 feat(contacts): add contacts module with backend APIs and web tab
Some checks failed
CI / test (push) Failing after 18s
- add user_contacts table and migration

- expose /users/contacts list/add/remove endpoints

- add Contacts tab in chat list with add/remove actions
2026-03-08 11:38:11 +03:00
99e7c70901 feat: realtime sync, settings UX and chat list improvements
Some checks failed
CI / test (push) Failing after 21s
- add chat_updated realtime event and dynamic chat subscriptions

- auto-join invite links in web app

- implement Telegram-like settings panel (general/notifications/privacy)

- add browser notification preferences and keyboard send mode

- improve chat list with last message preview/time and online badge

- rework chat members UI with context actions and role crowns
2026-03-08 10:59:44 +03:00
6a96a99775 feat(web): improve message UX, voice gestures, and attachments
Some checks failed
CI / test (push) Failing after 21s
2026-03-08 10:20:52 +03:00
f01bbda14e feat(invites): add group/channel invite links and join by token 2026-03-08 09:58:55 +03:00
7c4a5f990d feat(messages): support forwarding to multiple chats 2026-03-08 09:55:39 +03:00
8cdcd9531d feat(chats): add per-user pinned chats and pinned sorting 2026-03-08 09:54:43 +03:00
fdf973eeab feat(chats): add per-user chat archive support 2026-03-08 09:53:28 +03:00
76f008d635 feat(reactions): add message reactions API and web quick reactions 2026-03-08 09:51:18 +03:00
bc483afd78 feat(search): add unified global search for users/chats/messages
Some checks failed
CI / test (push) Failing after 24s
2026-03-08 09:41:20 +03:00
76ab9c72f5 feat(privacy): add private-message permission toggle 2026-03-08 02:56:58 +03:00
df79a70baf chore(prod): startup migrations, readiness checks and backend healthcheck
- add backend entrypoint that can run alembic upgrade head on startup
- add RUN_MIGRATIONS_ON_STARTUP setting and compose wiring
- add /health/live and /health/ready endpoints with db+redis checks
- add backend container healthcheck against readiness endpoint
- document readiness and startup migration behavior
2026-03-08 02:50:57 +03:00
74d9163dde fix(media): support voice audio/webm uploads
Some checks failed
CI / test (push) Failing after 18s
- allow audio/webm mime type
- normalize content-type values with codec parameters before validation
- use normalized mime for extension resolution
2026-03-08 02:48:44 +03:00
0b4bb19425 feat(chat): add random public_id and fix users blocked route
Some checks failed
CI / test (push) Failing after 20s
- add chats.public_id random identifier with migration 0011
- expose public_id in chat API payloads
- use chat public_id in message search UI label
- fix users router order so /users/blocked no longer conflicts with /users/{user_id}
2026-03-08 02:34:24 +03:00
159a8ba516 feat(privacy): user blocklist with private chat enforcement
Some checks failed
CI / test (push) Failing after 21s
- add blocked_users table and migration
- add users API: block, unblock, list blocked users
- prevent private chat creation and private messaging when block relation exists
- add block/unblock action in private chat info panel
2026-03-08 02:19:37 +03:00
ea8a50ee05 feat(notifications): per-chat mute settings
Some checks failed
CI / test (push) Failing after 18s
- add chat_notification_settings table and migration
- add chat notifications API (get/update muted)
- skip message notifications for muted recipients
- add mute/unmute control in chat info panel
2026-03-08 02:17:09 +03:00
a9e4222062 feat(realtime): add ping/pong heartbeat and watchdog reconnect
Some checks failed
CI / test (push) Failing after 20s
- support ping incoming event and pong outgoing response
- add web heartbeat interval to keep ws alive
- add stale-connection watchdog to force reconnect on missing pong
2026-03-08 02:13:34 +03:00
46dc601c84 feat(realtime): live online/offline events and unified search
Some checks failed
CI / test (push) Failing after 18s
- add websocket events user_online/user_offline
- broadcast presence changes on first connect and final disconnect only
- apply live presence updates in web chat store and realtime hook
- move public discover into unified left search (users + groups/channels)
- remove separate Discover Chats dialog/menu entry
2026-03-08 02:12:11 +03:00
afeb0acbe7 fix(channel): enforce read-only for members and polish chat info
Some checks failed
CI / test (push) Failing after 26s
- block send/forward in channels for member role on backend
- expose my_role in chat payload for client-side permissions
- hide message composer for channel members and show read-only notice
- hide members management sections for private/saved chats in info panel
- return enriched chat detail via serialize_chat_for_user
2026-03-08 02:07:37 +03:00
e6a271f8be feat(chat): add presence metadata and improve web chat core
Some checks failed
CI / test (push) Failing after 22s
- add user last_seen_at with alembic migration and persist on realtime disconnect
- extend chat serialization with private online/last_seen, group members/online, channel subscribers
- add Redis batch presence lookup helper
- update web chat list/header to display status counters and last-seen labels
- improve delivery receipt handling using last_delivered/last_read boundaries
- include chat info panel and related API/type updates
2026-03-08 02:02:09 +03:00
4ffbfc1e83 feat(web-core): implement unread counters and new-messages divider
Some checks failed
CI / test (push) Failing after 19s
backend:

- add unread_count to ChatRead serialization

- compute unread_count per chat using message_receipts and hidden messages

web:

- add unread badges in chat list

- track unread boundary per chat in store

- show 'New messages' divider in message list

- update realtime flow to increment/clear unread on incoming events
2026-03-08 01:43:27 +03:00
7f15edcb4e feat(core): clear saved chat and add message deletion scopes
Some checks failed
CI / test (push) Failing after 26s
backend:

- add message_hidden table for per-user message hiding

- support DELETE /messages/{id}?for_all=true|false

- implement delete-for-me vs delete-for-all logic by chat type/permissions

- add POST /chats/{chat_id}/clear and route saved chat deletion to clear

web:

- saved messages action changed from delete to clear

- message context menu now supports delete modal: for me / for everyone

- add local store helpers removeMessage/clearChatMessages

- include realtime stability improvements and app error boundary
2026-03-08 01:13:20 +03:00
456595a576 feat: add user display profiles and fix web context menu UX
Some checks failed
CI / test (push) Failing after 17s
backend:

- add required user name and optional bio fields

- extend auth/register and user schemas/services with name/bio

- add alembic migration 0006 with safe backfill name=username

- compute per-user chat display_title for private chats

- keep Saved Messages delete-for-all protections

web:

- registration now includes name

- add profile edit modal (name/username/bio/avatar url)

- show private chat names via display_title

- fix context menus to open near cursor with viewport clamping

- stabilize +/close floating button to remove visual jump
2026-03-08 00:57:02 +03:00
b9f71b9528 feat: add saved messages, public chat discovery/join, and chat delete options
All checks were successful
CI / test (push) Successful in 19s
- add Saved Messages system chat with dedicated API

- add public group/channel metadata and discover/join endpoints

- add chat delete flow with for_all option and channel-wide delete

- switch message actions to context menu and improve reply/forward visuals

- improve microphone permission handling for voice recording
2026-03-08 00:41:35 +03:00
b5a7d733c6 fix(orm): disambiguate Chat<->Message relationships
All checks were successful
CI / test (push) Successful in 26s
- set explicit foreign_keys for Chat.messages and Message.chat

- resolve mapper initialization error after pinned_message_id fk
2026-03-08 00:31:09 +03:00
e1d0375392 feat: add reply/forward/pin message flow across backend and web
Some checks failed
CI / test (push) Failing after 24s
- add reply_to/forwarded_from message fields and chat pinned_message field

- add forward and pin APIs plus reply support in message create

- wire web actions: Reply, Fwd, Pin and reply composer state

- fix spam policy bug: allow repeated identical messages, keep rate limiting
2026-03-08 00:28:43 +03:00