Skip to content

fix: upgrade CLI to new backend API and WebSocket protocol - #5

Merged
mooncitizen merged 1 commit into
mainfrom
fix/upgrade-the-cli-to-new-interactions
Mar 27, 2026
Merged

mooncitizen merged 1 commit into
mainfrom
fix/upgrade-the-cli-to-new-interactions

Conversation

@mooncitizen

@mooncitizen mooncitizen commented Mar 27, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The backend API/WebSocket protocol changed, breaking the CLI. This commit updates the CLI to work with the new spec.

WebSocket subscription model:

  • Replace subscribe_server_room/unsubscribe_server_room with subscribe_servers (per-server array subscription)
  • TUI now subscribes to all user servers on WS connect
  • Remove per-room unsubscribe (no longer in spec)

New WebSocket message types (server → client):

  • FriendRequestDeclined, FriendRequestWithdrawn, FriendRemoved
  • VoiceRoomUserSpeaking, ServerRoomCreated, ServerRoomDeleted
  • UserStatusChanged, ServerMemberStatuses, ServerInviteReceived
  • ServerSnapshot, RoomMessageEdited, RoomMessageDeleted, RoomTyping
  • DmMessageEdited, DmMessageDeleted, UnreadCounts, UserGameActivity

New WebSocket message types (client → server):

  • SetGameActivity, MarkRoomRead, MarkDmRead

REST API response format change:

  • Message endpoints now return {"messages": [...], "hasMore", "nextCursor"} instead of a bare array
  • Add extract_messages() helper to handle both formats
  • Update all 6 call sites (chat.rs, dms.rs, join.rs, tui/app.rs)

TUI message handlers:

  • Friend decline/withdraw/remove trigger friend list reload
  • RoomMessageEdited/DmMessageEdited update message content in place
  • RoomMessageDeleted/DmMessageDeleted remove message from list
  • ServerRoomCreated/Deleted trigger server detail refresh
  • UnreadCounts populates dm_unread from payload
  • Remaining new types log at debug level (no-op for now)

Bug fixes:

  • Fix Ctrl+C/Esc not exiting chat open (return value was discarded)
  • Unwrap nested "message" field in RoomMessage WS events
  • Add raw WS logging to non-persistent connections for debugging

Other:

  • Add --region flag to join command for voice server region selection
  • Add unit tests for all new WS message types and serialization
  • Clean clippy warnings

Changes

How to test

  1. Build locally and authenticate
  2. Send a message directly or via the ui

Checklist

  • Code compiles without warnings (cargo build --workspace)
  • Tests pass (cargo test --workspace)
  • I have tested this on my platform (macOS / Linux)

The backend API/WebSocket protocol changed, breaking the CLI. This commit
updates the CLI to work with the new spec.

WebSocket subscription model:
- Replace subscribe_server_room/unsubscribe_server_room with
  subscribe_servers (per-server array subscription)
- TUI now subscribes to all user servers on WS connect
- Remove per-room unsubscribe (no longer in spec)

New WebSocket message types (server → client):
- FriendRequestDeclined, FriendRequestWithdrawn, FriendRemoved
- VoiceRoomUserSpeaking, ServerRoomCreated, ServerRoomDeleted
- UserStatusChanged, ServerMemberStatuses, ServerInviteReceived
- ServerSnapshot, RoomMessageEdited, RoomMessageDeleted, RoomTyping
- DmMessageEdited, DmMessageDeleted, UnreadCounts, UserGameActivity

New WebSocket message types (client → server):
- SetGameActivity, MarkRoomRead, MarkDmRead

REST API response format change:
- Message endpoints now return {"messages": [...], "hasMore", "nextCursor"}
  instead of a bare array
- Add extract_messages() helper to handle both formats
- Update all 6 call sites (chat.rs, dms.rs, join.rs, tui/app.rs)

TUI message handlers:
- Friend decline/withdraw/remove trigger friend list reload
- RoomMessageEdited/DmMessageEdited update message content in place
- RoomMessageDeleted/DmMessageDeleted remove message from list
- ServerRoomCreated/Deleted trigger server detail refresh
- UnreadCounts populates dm_unread from payload
- Remaining new types log at debug level (no-op for now)

Bug fixes:
- Fix Ctrl+C/Esc not exiting chat open (return value was discarded)
- Unwrap nested "message" field in RoomMessage WS events
- Add raw WS logging to non-persistent connections for debugging

Other:
- Add --region flag to join command for voice server region selection
- Add unit tests for all new WS message types and serialization
- Clean clippy warnings
@mooncitizen
mooncitizen force-pushed the fix/upgrade-the-cli-to-new-interactions branch from 3ddc43f to 19dbb7c Compare March 27, 2026 16:26
@mooncitizen
mooncitizen merged commit 22d9950 into main Mar 27, 2026
2 checks passed
@mooncitizen
mooncitizen deleted the fix/upgrade-the-cli-to-new-interactions branch March 27, 2026 16:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant