Signal-iOS/SignalServiceKit/protobuf/SignalService.proto
2021-04-29 18:01:18 -07:00

693 lines
18 KiB
Protocol Buffer
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Copyright (C) 2014-2016 Open Whisper Systems
*
* Licensed according to the LICENSE file in this repository.
*/
// iOS - since we use a modern proto-compiler, we must specify
// the legacy proto format.
syntax = "proto2";
// iOS - package name determines class prefix
package SignalServiceProtos;
option java_package = "org.whispersystems.signalservice.internal.push";
option java_outer_classname = "SignalServiceProtos";
message Envelope {
enum Type {
UNKNOWN = 0;
CIPHERTEXT = 1;
KEY_EXCHANGE = 2;
PREKEY_BUNDLE = 3;
RECEIPT = 5;
UNIDENTIFIED_SENDER = 6;
}
optional Type type = 1;
optional string sourceE164 = 2;
optional uint32 sourceDevice = 7;
optional string relay = 3;
// @required
optional uint64 timestamp = 5;
optional bytes legacyMessage = 6; // Contains an encrypted DataMessage
optional bytes content = 8; // Contains an encrypted Content
// We may eventually want to make this required.
optional string serverGuid = 9;
// We may eventually want to make this required.
optional uint64 serverTimestamp = 10;
// @trustedMapping
optional string sourceUuid = 11;
}
message TypingMessage {
enum Action {
STARTED = 0;
STOPPED = 1;
}
// @required
optional uint64 timestamp = 1;
optional Action action = 2;
optional bytes groupId = 3;
}
message Content {
optional DataMessage dataMessage = 1;
optional SyncMessage syncMessage = 2;
optional CallMessage callMessage = 3;
optional NullMessage nullMessage = 4;
optional ReceiptMessage receiptMessage = 5;
optional TypingMessage typingMessage = 6;
}
message CallMessage {
message Offer {
enum Type {
OFFER_AUDIO_CALL = 0;
OFFER_VIDEO_CALL = 1;
// next index 3, skip 2 it was the unused "NEED_PERMISSION" type
}
// @required
optional uint64 id = 1;
// Legacy/deprecated; replaced by 'opaque'
optional string sdp = 2;
optional Type type = 3;
optional bytes opaque = 4;
}
message Answer {
// @required
optional uint64 id = 1;
// Legacy/deprecated; replaced by 'opaque'
optional string sdp = 2;
optional bytes opaque = 3;
}
message IceUpdate {
// @required
optional uint64 id = 1;
// Legacy/deprecated; remove when old clients are gone.
optional string mid = 2;
// Legacy/deprecated; remove when old clients are gone.
optional uint32 line = 3;
// Legacy/deprecated; replaced by 'opaque'
optional string sdp = 4;
optional bytes opaque = 5;
}
message Busy {
// @required
optional uint64 id = 1;
}
message Hangup {
enum Type {
HANGUP_NORMAL = 0;
HANGUP_ACCEPTED = 1;
HANGUP_DECLINED = 2;
HANGUP_BUSY = 3;
HANGUP_NEED_PERMISSION = 4;
}
// @required
optional uint64 id = 1;
optional Type type = 2;
optional uint32 deviceId = 3;
}
message Opaque {
optional bytes data = 1;
}
optional Offer offer = 1;
optional Answer answer = 2;
repeated IceUpdate iceUpdate = 3;
optional Hangup legacyHangup = 4;
optional Busy busy = 5;
// Signal-iOS sends profile key with call messages
// for earlier discovery.
optional bytes profileKey = 6;
optional Hangup hangup = 7;
optional bool supportsMultiRing = 8;
optional uint32 destinationDeviceId = 9;
optional Opaque opaque = 10;
}
message DataMessage {
enum Flags {
END_SESSION = 1;
EXPIRATION_TIMER_UPDATE = 2;
PROFILE_KEY_UPDATE = 4;
}
message Quote {
message QuotedAttachment {
enum Flags {
VOICE_MESSAGE = 1;
}
optional string contentType = 1;
optional string fileName = 2;
optional AttachmentPointer thumbnail = 3;
optional uint32 flags = 4;
}
// @required
optional uint64 id = 1;
optional string authorE164 = 2;
optional string authorUuid = 5;
optional string text = 3;
repeated QuotedAttachment attachments = 4;
repeated BodyRange bodyRanges = 6;
}
message Contact {
message Name {
optional string givenName = 1;
optional string familyName = 2;
optional string prefix = 3;
optional string suffix = 4;
optional string middleName = 5;
optional string displayName = 6;
}
message Phone {
enum Type {
HOME = 1;
MOBILE = 2;
WORK = 3;
CUSTOM = 4;
}
optional string value = 1;
optional Type type = 2;
optional string label = 3;
}
message Email {
enum Type {
HOME = 1;
MOBILE = 2;
WORK = 3;
CUSTOM = 4;
}
optional string value = 1;
optional Type type = 2;
optional string label = 3;
}
message PostalAddress {
enum Type {
HOME = 1;
WORK = 2;
CUSTOM = 3;
}
optional Type type = 1;
optional string label = 2;
optional string street = 3;
optional string pobox = 4;
optional string neighborhood = 5;
optional string city = 6;
optional string region = 7;
optional string postcode = 8;
optional string country = 9;
}
message Avatar {
optional AttachmentPointer avatar = 1;
optional bool isProfile = 2;
}
optional Name name = 1;
repeated Phone number = 3;
repeated Email email = 4;
repeated PostalAddress address = 5;
optional Avatar avatar = 6;
optional string organization = 7;
}
message Preview {
// @required
optional string url = 1;
optional string title = 2;
optional AttachmentPointer image = 3;
optional string previewDescription = 4;
optional uint64 date = 5;
}
message Sticker {
// @required
optional bytes packId = 1;
// @required
optional bytes packKey = 2;
// @required
optional uint32 stickerId = 3;
// @required
optional AttachmentPointer data = 4;
optional string emoji = 5;
}
message Reaction {
// @required
optional string emoji = 1;
optional bool remove = 2;
optional string authorE164 = 3;
optional string authorUuid = 4;
// @required
optional uint64 timestamp = 5;
}
message Delete {
// @required
optional uint64 targetSentTimestamp = 1;
}
message BodyRange {
optional uint32 start = 1;
optional uint32 length = 2;
// oneof commented out because swift generated
// enum with associated values can't be converted
// to objc representation
//
// oneof associatedValue {
optional string mentionUuid = 3;
// }
}
message GroupCallUpdate {
optional string eraId = 1;
}
message Payment {
message Amount {
message MobileCoin {
// @required
optional uint64 picoMob = 1; // 1,000,000,000,000 picoMob per Mob
}
// oneof commented out
// oneof Amount {
optional MobileCoin mobileCoin = 1;
// }
}
message RequestId {
// @required
optional string uuid = 1;
}
message Request {
// @required
optional RequestId requestId = 1;
// @required
optional Amount amount = 2;
optional string note = 3;
}
message Notification {
message MobileCoin {
// @required
optional bytes receipt = 1;
}
// oneof commented out
// oneof Transaction {
optional MobileCoin mobileCoin = 1;
// }
// Optional, Refers to the PaymentRequest message, if any.
optional string note = 2;
optional RequestId requestId = 1003;
}
message Cancellation {
// @required
optional RequestId requestId = 1;
}
// oneof commented out
// oneof Item {
optional Notification notification = 1;
optional Request request = 1002;
optional Cancellation cancellation = 1003;
// }
}
enum ProtocolVersion {
option allow_alias = true;
INITIAL = 0;
MESSAGE_TIMERS = 1;
VIEW_ONCE = 2;
VIEW_ONCE_VIDEO = 3;
REACTIONS = 4;
CDN_SELECTOR_ATTACHMENTS = 5;
MENTIONS = 6;
PAYMENTS = 7;
CURRENT = 7;
}
optional string body = 1;
repeated AttachmentPointer attachments = 2;
optional GroupContext group = 3;
optional GroupContextV2 groupV2 = 15;
optional uint32 flags = 4;
optional uint32 expireTimer = 5;
optional bytes profileKey = 6;
optional uint64 timestamp = 7;
optional Quote quote = 8;
repeated Contact contact = 9;
repeated Preview preview = 10;
optional Sticker sticker = 11;
optional uint32 requiredProtocolVersion = 12;
optional bool isViewOnce = 14;
optional Reaction reaction = 16;
optional Delete delete = 17;
repeated BodyRange bodyRanges = 18;
optional GroupCallUpdate groupCallUpdate = 19;
optional Payment payment = 20;
}
message NullMessage {
optional bytes padding = 1;
}
message ReceiptMessage {
enum Type {
DELIVERY = 0;
READ = 1;
VIEWED = 2;
}
optional Type type = 1;
repeated uint64 timestamp = 2;
}
message Verified {
enum State {
DEFAULT = 0;
VERIFIED = 1;
UNVERIFIED = 2;
}
optional string destinationE164 = 1;
optional string destinationUuid = 5;
optional bytes identityKey = 2;
optional State state = 3;
optional bytes nullMessage = 4;
}
message SyncMessage {
message Sent {
message UnidentifiedDeliveryStatus {
optional string destinationE164 = 1;
optional string destinationUuid = 3;
optional bool unidentified = 2;
}
optional string destinationE164 = 1;
optional string destinationUuid = 7;
optional uint64 timestamp = 2;
optional DataMessage message = 3;
optional uint64 expirationStartTimestamp = 4;
repeated UnidentifiedDeliveryStatus unidentifiedStatus = 5;
optional bool isRecipientUpdate = 6 [default = false];
}
message Contacts {
// @required
optional AttachmentPointer blob = 1;
// Signal-iOS renamed this property.
optional bool isComplete = 2 [default = false];
}
message Groups {
optional AttachmentPointer blob = 1;
}
message Blocked {
repeated string numbers = 1;
repeated bytes groupIds = 2;
repeated string uuids = 3;
}
message Request {
enum Type {
UNKNOWN = 0;
CONTACTS = 1;
GROUPS = 2;
BLOCKED = 3;
CONFIGURATION = 4;
KEYS = 5;
}
optional Type type = 1;
}
message Read {
optional string senderE164 = 1;
optional string senderUuid = 3;
// @required
optional uint64 timestamp = 2;
}
message Viewed {
optional string senderE164 = 1;
optional string senderUuid = 3;
// @required
optional uint64 timestamp = 2;
}
message Configuration {
optional bool readReceipts = 1;
optional bool unidentifiedDeliveryIndicators = 2;
optional bool typingIndicators = 3;
// 4 is reserved
optional uint32 provisioningVersion = 5;
optional bool linkPreviews = 6;
}
message StickerPackOperation {
enum Type {
INSTALL = 0;
REMOVE = 1;
}
// @required
optional bytes packId = 1;
// @required
optional bytes packKey = 2;
optional Type type = 3;
}
message ViewOnceOpen {
optional string senderE164 = 1;
optional string senderUuid = 3;
// @required
optional uint64 timestamp = 2;
}
message FetchLatest {
enum Type {
UNKNOWN = 0;
LOCAL_PROFILE = 1;
STORAGE_MANIFEST = 2;
}
optional Type type = 1;
}
message Keys {
optional bytes storageService = 1;
}
message MessageRequestResponse {
enum Type {
UNKNOWN = 0;
ACCEPT = 1;
DELETE = 2;
BLOCK = 3;
BLOCK_AND_DELETE = 4;
}
optional string threadE164 = 1;
optional string threadUuid = 2;
optional bytes groupId = 3;
optional Type type = 4;
}
message OutgoingPayment {
message MobileCoin {
optional bytes recipientAddress = 1;
// @required
optional uint64 amountPicoMob = 2;
// @required
optional uint64 feePicoMob = 3;
optional bytes receipt = 4;
optional uint64 ledgerBlockTimestamp = 5;
// @required
optional uint64 ledgerBlockIndex = 6;
repeated bytes spentKeyImages = 7;
repeated bytes outputPublicKeys = 8;
}
optional string recipientUuid = 1;
optional string note = 2;
// oneof attachment_identifier {
optional MobileCoin mobileCoin = 3;
// }
}
optional Sent sent = 1;
optional Contacts contacts = 2;
optional Groups groups = 3;
optional Request request = 4;
repeated Read read = 5;
optional Blocked blocked = 6;
optional Verified verified = 7;
optional Configuration configuration = 9;
optional bytes padding = 8;
repeated StickerPackOperation stickerPackOperation = 10;
optional ViewOnceOpen viewOnceOpen = 11;
optional FetchLatest fetchLatest = 12;
optional Keys keys = 13;
optional MessageRequestResponse messageRequestResponse = 14;
optional OutgoingPayment outgoingPayment = 15;
repeated Viewed viewed = 16;
}
message AttachmentPointer {
enum Flags {
VOICE_MESSAGE = 1;
BORDERLESS = 2;
GIF = 3;
}
// oneof commented out because swift generated
// enum with associated values can't be converted
// to objc representation
//
// oneof attachment_identifier {
optional fixed64 cdnId = 1;
optional string cdnKey = 15;
// }
optional string contentType = 2;
optional bytes key = 3;
optional uint32 size = 4;
optional bytes thumbnail = 5;
optional bytes digest = 6;
optional string fileName = 7;
optional uint32 flags = 8;
optional uint32 width = 9;
optional uint32 height = 10;
optional string caption = 11;
optional string blurHash = 12;
optional uint64 uploadTimestamp = 13;
optional uint32 cdnNumber = 14;
// Next ID: 16
}
message GroupContext {
message Member {
// skip 1, formerly uuid
optional string e164 = 2;
}
enum Type {
UNKNOWN = 0;
UPDATE = 1;
DELIVER = 2;
QUIT = 3;
REQUEST_INFO = 4;
}
// @required
optional bytes id = 1;
optional Type type = 2;
optional string name = 3;
repeated string membersE164 = 4;
optional AttachmentPointer avatar = 5;
repeated Member members = 6;
}
message GroupContextV2 {
optional bytes masterKey = 1;
optional uint32 revision = 2;
optional bytes groupChange = 3;
}
message ContactDetails {
message Avatar {
optional string contentType = 1;
optional uint32 length = 2;
}
optional string contactE164 = 1;
// @trustedMapping
optional string contactUuid = 9;
optional string name = 2;
optional Avatar avatar = 3;
optional string color = 4;
optional Verified verified = 5;
optional bytes profileKey = 6;
optional bool blocked = 7;
optional uint32 expireTimer = 8;
optional uint32 inboxPosition = 10;
optional bool archived = 11;
}
message GroupDetails {
message Avatar {
optional string contentType = 1;
optional uint32 length = 2;
}
message Member {
// skip 1, formerly uuid
optional string e164 = 2;
}
// @required
optional bytes id = 1;
optional string name = 2;
repeated string membersE164 = 3;
optional Avatar avatar = 4;
optional bool active = 5 [default = true];
optional uint32 expireTimer = 6;
optional string color = 7;
optional bool blocked = 8;
repeated Member members = 9;
optional uint32 inboxPosition = 10;
optional bool archived = 11;
}
message Pack {
message Sticker {
// @required
optional uint32 id = 1;
optional string emoji = 2;
optional string contentType = 3;
}
optional string title = 1;
optional string author = 2;
optional Sticker cover = 3;
repeated Sticker stickers = 4;
}
message PaymentAddress {
message MobileCoin {
// @required
optional bytes publicAddress = 1;
// @required
optional bytes signature = 2;
}
// oneof commented out
// oneof Address {
optional MobileCoin mobileCoin = 1;
// }
}