status-im/status-go

View on GitHub
protocol/protobuf/chat_message.proto

Summary

Maintainability
Test Coverage
syntax = "proto3";

option go_package = "./;protobuf";
package protobuf;

import "enums.proto";
import "contact.proto";
import "shard.proto";

message StickerMessage {
  string hash = 1;
  int32 pack = 2;
}

message ImageMessage {
  bytes payload = 1;
  ImageFormat format = 2;
  string album_id = 3;
  uint32 width = 4;
  uint32 height = 5;
  uint32 album_images_count = 6;
}

message AudioMessage {
  bytes payload = 1;
  AudioType type = 2;
  uint64 duration_ms = 3;
  enum AudioType {
    UNKNOWN_AUDIO_TYPE = 0;
    AAC = 1;
    AMR = 2;
  }
}

message EditMessage {
  uint64 clock = 1;
  // Text of the message
  string text = 2;

  string chat_id = 3;
  string message_id = 4;

  // Grant for community edit messages
  bytes grant = 5 [deprecated = true];

  // The type of message (public/one-to-one/private-group-chat)
  MessageType message_type = 6;

  ChatMessage.ContentType content_type = 7;
  repeated UnfurledLink unfurled_links = 8;
  UnfurledStatusLinks unfurled_status_links = 9;
}

message DeleteMessage {
  uint64 clock = 1;

  string chat_id = 2;
  string message_id = 3;

  // Grant for community delete messages
  bytes grant = 4 [deprecated = true];

  // The type of message (public/one-to-one/private-group-chat)
  MessageType message_type = 5;

  string deleted_by = 6;
}

message SyncDeleteForMeMessage {
  uint64 clock = 1;
  string message_id = 2;
}

message DiscordMessage {
  string id = 1;
  string type = 2;
  string timestamp = 3;
  string timestampEdited = 4;
  string content = 5;
  DiscordMessageAuthor author = 6;
  DiscordMessageReference reference = 7;
  repeated DiscordMessageAttachment attachments = 8;
}

message DiscordMessageAuthor {
  string id = 1;
  string name = 2;
  string discriminator = 3;
  string nickname = 4;
  string avatarUrl = 5;
  bytes avatarImagePayload = 6;
  string localUrl = 7;
}

message DiscordMessageReference {
  string messageId = 1;
  string channelId = 2;
  string guildId = 3;
}

message DiscordMessageAttachment {
  string id = 1;
  string messageId = 2;
  string url = 3;
  string fileName = 4;
  uint64 fileSizeBytes = 5;
  string contentType = 6;
  bytes payload = 7;
  string localUrl = 8;
}

message BridgeMessage {
  string bridgeName = 1;
  string userName = 2;
  string userAvatar = 3;
  string userID = 4;
  string content = 5;
  string messageID = 6;
  string parentMessageID = 7;
}

message UnfurledLinkThumbnail {
  bytes payload = 1;
  uint32 width = 2;
  uint32 height = 3;
}

message UnfurledLink {
  // A valid URL which uniquely identifies this link.
  string url = 1;
  // Website's title.
  string title = 2;
  // Description is sometimes available, but can be empty. Most mainstream
  // websites provide this information.
  string description = 3;
  bytes thumbnail_payload = 4;
  uint32 thumbnail_width = 5;
  uint32 thumbnail_height = 6;
  LinkType type = 7;
  bytes favicon_payload = 8;

  enum LinkType {
    LINK = 0;
    IMAGE = 1;
  }
}

message UnfurledStatusContactLink {
  bytes public_key = 1;
  string display_name = 2;
  string description = 3;
  UnfurledLinkThumbnail icon = 4;
}

message UnfurledStatusCommunityLink {
  bytes community_id = 1;
  string display_name = 2;
  string description = 3;
  uint32 members_count = 4;
  string color = 5;
  UnfurledLinkThumbnail icon = 7;
  UnfurledLinkThumbnail banner = 8;
}

message UnfurledStatusChannelLink {
  string channel_uuid = 1;
  string emoji = 2;
  string display_name = 3;
  string description = 4;
  string color = 5;
  UnfurledStatusCommunityLink community = 6;
}

message UnfurledStatusLink {
  string url = 1;
  oneof payload {
    UnfurledStatusContactLink contact = 2;
    UnfurledStatusCommunityLink community = 3;
    UnfurledStatusChannelLink channel = 4;
  }
}

// Create a wrapper around repeated property for proper unmarshalling
message UnfurledStatusLinks {
  repeated UnfurledStatusLink unfurled_status_links = 1;
}

message ChatMessage {
  // Lamport timestamp of the chat message
  uint64 clock = 1;
  // Unix timestamps in milliseconds, currently not used as we use whisper as
  // more reliable, but here so that we don't rely on it
  uint64 timestamp = 2;
  // Text of the message
  string text = 3;
  // Id of the message that we are replying to
  string response_to = 4;
  // Ens name of the sender
  string ens_name = 5;
  // Chat id, this field is symmetric for public-chats and private group chats,
  // but asymmetric in case of one-to-ones, as the sender will use the chat-id
  // of the received, while the receiver will use the chat-id of the sender.
  // Probably should be the concatenation of sender-pk & receiver-pk in
  // alphabetical order
  string chat_id = 6;

  // The type of message (public/one-to-one/private-group-chat)
  MessageType message_type = 7;
  // The type of the content of the message
  ContentType content_type = 8;

  oneof payload {
    StickerMessage sticker = 9;
    ImageMessage image = 10;
    AudioMessage audio = 11;
    bytes community = 12;
    DiscordMessage discord_message = 99;
    BridgeMessage bridge_message = 100;
  }

  // Grant for community chat messages
  bytes grant = 13 [deprecated = true];

  // Message author's display name, introduced in version 1
  string display_name = 14;

  ContactRequestPropagatedState contact_request_propagated_state = 15;

  repeated UnfurledLink unfurled_links = 16;

  Shard shard = 17;

  UnfurledStatusLinks unfurled_status_links = 18;

  uint32 customization_color = 19;

  enum ContentType {
    UNKNOWN_CONTENT_TYPE = 0;
    TEXT_PLAIN = 1;
    STICKER = 2;
    STATUS = 3;
    EMOJI = 4;
    TRANSACTION_COMMAND = 5;
    // Only local
    SYSTEM_MESSAGE_CONTENT_PRIVATE_GROUP = 6;
    IMAGE = 7;
    AUDIO = 8;
    COMMUNITY = 9;
    // Only local
    SYSTEM_MESSAGE_GAP = 10;
    CONTACT_REQUEST = 11;
    DISCORD_MESSAGE = 12;
    IDENTITY_VERIFICATION = 13;
    // Only local
    SYSTEM_MESSAGE_PINNED_MESSAGE = 14;
    // Only local
    SYSTEM_MESSAGE_MUTUAL_EVENT_SENT = 15;
    // Only local
    SYSTEM_MESSAGE_MUTUAL_EVENT_ACCEPTED = 16;
    // Only local
    SYSTEM_MESSAGE_MUTUAL_EVENT_REMOVED = 17;
    BRIDGE_MESSAGE = 18;
  }
}