Repository navigation
0.16.0
Synced to flipcash2-protobuf-api@ec66e6b1,
picking up #132 and
#133. chat.v1, event.v1,
messaging.v1 and profile.v1 moved; blob.v1 changed only in comments.
Changed
StartChatRequest'sgrouponeof case is nowpublic_group, and its message
GroupChatParametersis nowPublicGroupChatParameters. The field number is still 1, so this is
wire-compatible, but every call site that sets or reads it stops compiling on upgrade
(setGroup/groupin Kotlin,.groupin Swift).
Added
- Private groups.
StartChatRequestgains aprivate_groupcase (= 2) with
PrivateGroupChatParameters(title, 1–64 characters; optionalpicture). A private group is
visible once created, but nothing can happen in it until its creator stores the group's key. - Seven
ChatRPCs for the lobby and keys:EnterLobby,LeaveLobby,GetLobbyMembers,
AdmitLobbyMember,DenyLobbyMember,SetKeyEnvelopeandGetKeyEnvelope, each with its own
Resultenum. A user waits in the lobby until the creator admits or denies them; admitting is
the only way to hand another user a key envelope, and the admission arrives as an ordinary
RosterUpdate.MemberJoined. A denial is not announced to the denied user. chat.v1.KeyEnvelope(scheme, 24-bytenonce, 48-byteciphertext): the group's 32-byte chat
key, wrapped per member. The first envelope a caller stores for themself stands; a different one
afterwards returnsALREADY_SET. There is no forward secrecy, and a member who leaves still knows
the chat key.chat.v1.Lobby,LobbyMember,LobbyUpdateandLobbyUpdateBatch, and
event.v1.ChatUpdate.lobby_updates(= 9) carrying members entering and leaving a lobby.chat.v1.Metadata.is_private(= 14) andin_lobby(= 15).in_lobbyis per-viewer: there is no
RPC that lists the lobbies a caller is waiting in, so a client reads it fromGetChat.messaging.v1.EncryptedContent.Scheme.CHAT_KEY_XCHACHA20POLY1305(= 2), the scheme private groups
use. Clients render a scheme they don't recognize as unsupported.ENCRYPTION_REQUIREDonSendMessageResponse.Result(= 3) andEditMessageResponse.Result
(= 6): the chat is a private group and the content is notEncryptedContent.- Profile bios and cover pictures:
UserProfile.bio(= 12, up to 160 characters) and
cover_picture(= 13), set through the newProfile.SetBioandProfile.SetCoverPictureRPCs.
SetBiocan come backFAILED_MODERATEDwith aflagged_category;SetCoverPicturereports blob
state the same waySetProfilePicturedoes.
Upgrading
The public_group rename is the one source break. No field or enum value was renumbered: every new
enum case is appended after the existing ones, so Error*(rawValue:) mappings keep their meaning.