// src/protos/messages/v1/application.proto
syntax = "proto3";
package de_mls.messages.v1;
import "hashgraph-like-consensus/v1/consensus.proto";
message AppMessage {
oneof payload {
ConversationMessage conversation_message = 1;
BatchProposalsMessage batch_proposals_message = 2;
BanRequest ban_request = 3;
consensus.v1.Proposal proposal = 4;
consensus.v1.Vote vote = 5;
VotePayload vote_payload = 6;
UserVote user_vote = 7;
ProposalAdded proposal_added = 8;
}
}
message BanRequest {
string user_to_ban = 1;
string group_name = 2;
}
message ConversationMessage {
bytes message = 1;
string sender = 2;
string group_name = 3;
}
message BatchProposalsMessage {
bytes group_name = 1;
repeated bytes mls_proposals = 2; // Individual MLS proposal messages
bytes commit_message = 3; // MLS commit message
repeated uint32 proposal_ids = 4; // Consensus proposal IDs included in this batch
bytes proposals_digest = 5; // SHA-256 over canonical (id, payload) pairs
}
// Yes/No vote for a given proposal. Based on the result, the `Vote` will be created.
message UserVote {
uint32 proposal_id = 1;
bool vote = 2;
string group_name = 3;
}
// Proposal added message is sent to the UI when a new proposal is added to the group.
message ProposalAdded {
string group_id = 1;
GroupUpdateRequest request = 2;
}
message GroupUpdateRequest {
oneof payload {
InviteMember invite_member = 1;
RemoveMember remove_member = 2;
}
}
message InviteMember {
bytes key_package_bytes = 1;
bytes identity = 2;
}
message RemoveMember {
bytes identity = 1;
}
enum Outcome {
OUTCOME_UNSPECIFIED = 0;
OUTCOME_ACCEPTED = 1;
OUTCOME_REJECTED = 2;
}
message VotePayload {
string group_id = 41;
uint32 proposal_id = 42;
bytes payload = 43;
uint64 timestamp = 44;
}