first pass on signal-server proto file
This commit is contained in:
parent
198b217cfa
commit
d958fda766
|
@ -31,7 +31,6 @@ message BackupInfo {
|
||||||
// For example, Chats may all be together at the beginning,
|
// For example, Chats may all be together at the beginning,
|
||||||
// or may each immediately precede its first ChatItem.
|
// or may each immediately precede its first ChatItem.
|
||||||
message Frame {
|
message Frame {
|
||||||
// If unset, importers should skip this frame without throwing an error.
|
|
||||||
oneof item {
|
oneof item {
|
||||||
AccountData account = 1;
|
AccountData account = 1;
|
||||||
Recipient recipient = 2;
|
Recipient recipient = 2;
|
||||||
|
@ -42,8 +41,9 @@ message Frame {
|
||||||
NotificationProfile notificationProfile = 7;
|
NotificationProfile notificationProfile = 7;
|
||||||
ChatFolder chatFolder = 8;
|
ChatFolder chatFolder = 8;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
// If unset, importers should skip this frame without throwing an error.
|
||||||
|
}
|
||||||
message AccountData {
|
message AccountData {
|
||||||
enum PhoneNumberSharingMode {
|
enum PhoneNumberSharingMode {
|
||||||
UNKNOWN = 0; // Interpret as "Nobody"
|
UNKNOWN = 0; // Interpret as "Nobody"
|
||||||
|
@ -62,12 +62,10 @@ message AccountData {
|
||||||
PINK = 7;
|
PINK = 7;
|
||||||
PURPLE = 8;
|
PURPLE = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes entropy = 1; // 32 bytes of entropy used for encryption
|
bytes entropy = 1; // 32 bytes of entropy used for encryption
|
||||||
bytes serverId = 2; // 16 bytes of encoded UUID provided by the server
|
bytes serverId = 2; // 16 bytes of encoded UUID provided by the server
|
||||||
Color color = 3;
|
Color color = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message AccountSettings {
|
message AccountSettings {
|
||||||
bool readReceipts = 1;
|
bool readReceipts = 1;
|
||||||
bool sealedSenderIndicators = 2;
|
bool sealedSenderIndicators = 2;
|
||||||
|
@ -89,25 +87,23 @@ message AccountData {
|
||||||
ChatStyle defaultChatStyle = 18;
|
ChatStyle defaultChatStyle = 18;
|
||||||
repeated ChatStyle.CustomChatColor customChatColors = 19;
|
repeated ChatStyle.CustomChatColor customChatColors = 19;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SubscriberData {
|
message SubscriberData {
|
||||||
bytes subscriberId = 1;
|
bytes subscriberId = 1;
|
||||||
string currencyCode = 2;
|
string currencyCode = 2;
|
||||||
bool manuallyCancelled = 3;
|
bool manuallyCancelled = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message IAPSubscriberData {
|
message IAPSubscriberData {
|
||||||
bytes subscriberId = 1;
|
|
||||||
|
|
||||||
// If unset, importers should ignore the subscriber data without throwing an error.
|
|
||||||
oneof iapSubscriptionId {
|
oneof iapSubscriptionId {
|
||||||
// Identifies an Android Play Store IAP subscription.
|
// Identifies an Android Play Store IAP subscription.
|
||||||
string purchaseToken = 2;
|
string purchaseToken = 2;
|
||||||
// Identifies an iOS App Store IAP subscription.
|
// Identifies an iOS App Store IAP subscription.
|
||||||
uint64 originalTransactionId = 3;
|
uint64 originalTransactionId = 3;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
bytes subscriberId = 1;
|
||||||
|
|
||||||
|
// If unset, importers should ignore the subscriber data without throwing an error.
|
||||||
|
}
|
||||||
bytes profileKey = 1;
|
bytes profileKey = 1;
|
||||||
optional string username = 2;
|
optional string username = 2;
|
||||||
UsernameLink usernameLink = 3;
|
UsernameLink usernameLink = 3;
|
||||||
|
@ -115,15 +111,12 @@ message AccountData {
|
||||||
string familyName = 5;
|
string familyName = 5;
|
||||||
string avatarUrlPath = 6;
|
string avatarUrlPath = 6;
|
||||||
SubscriberData donationSubscriberData = 7;
|
SubscriberData donationSubscriberData = 7;
|
||||||
reserved 8; // A deprecated format // backupsSubscriberData
|
= 8; // A deprecated format // backupsSubscriberData
|
||||||
AccountSettings accountSettings = 9;
|
AccountSettings accountSettings = 9;
|
||||||
IAPSubscriberData backupsSubscriberData = 10;
|
IAPSubscriberData backupsSubscriberData = 10;
|
||||||
string svrPin = 11;
|
string svrPin = 11;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Recipient {
|
message Recipient {
|
||||||
uint64 id = 1; // generated id for reference only within this file
|
|
||||||
// If unset, importers should skip this frame without throwing an error.
|
|
||||||
oneof destination {
|
oneof destination {
|
||||||
Contact contact = 2;
|
Contact contact = 2;
|
||||||
Group group = 3;
|
Group group = 3;
|
||||||
|
@ -132,17 +125,10 @@ message Recipient {
|
||||||
ReleaseNotes releaseNotes = 6;
|
ReleaseNotes releaseNotes = 6;
|
||||||
CallLink callLink = 7;
|
CallLink callLink = 7;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// If unset - computed as the value of the first byte of SHA-256(msg=CONTACT_ID)
|
uint64 id = 1; // generated id for reference only within this file
|
||||||
// modulo the count of colors. Once set the avatar color for a recipient is
|
// If unset, importers should skip this frame without throwing an error.
|
||||||
// never recomputed or changed.
|
}
|
||||||
//
|
|
||||||
// `CONTACT_ID` is the first available identifier from the list:
|
|
||||||
// - ServiceIdToBinary(ACI)
|
|
||||||
// - E164
|
|
||||||
// - ServiceIdToBinary(PNI)
|
|
||||||
// - Group Id
|
|
||||||
enum AvatarColor {
|
enum AvatarColor {
|
||||||
A100 = 0;
|
A100 = 0;
|
||||||
A110 = 1;
|
A110 = 1;
|
||||||
|
@ -164,8 +150,8 @@ message Contact {
|
||||||
VERIFIED = 1;
|
VERIFIED = 1;
|
||||||
UNVERIFIED = 2; // Was once verified and is now unverified
|
UNVERIFIED = 2; // Was once verified and is now unverified
|
||||||
}
|
}
|
||||||
|
// isEmpty
|
||||||
message Registered {}
|
// footer was empty
|
||||||
message NotRegistered {
|
message NotRegistered {
|
||||||
uint64 unregisteredTimestamp = 1;
|
uint64 unregisteredTimestamp = 1;
|
||||||
}
|
}
|
||||||
|
@ -208,29 +194,14 @@ message Contact {
|
||||||
string systemNickname = 20;
|
string systemNickname = 20;
|
||||||
optional AvatarColor avatarColor = 21;
|
optional AvatarColor avatarColor = 21;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Group {
|
message Group {
|
||||||
enum StorySendMode {
|
enum StorySendMode {
|
||||||
DEFAULT = 0; // A valid value -- indicates unset by the user
|
DEFAULT = 0; // A valid value -- indicates unset by the user
|
||||||
DISABLED = 1;
|
DISABLED = 1;
|
||||||
ENABLED = 2;
|
ENABLED = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes masterKey = 1;
|
|
||||||
bool whitelisted = 2;
|
|
||||||
bool hideStory = 3;
|
|
||||||
StorySendMode storySendMode = 4;
|
|
||||||
GroupSnapshot snapshot = 5;
|
|
||||||
bool blocked = 6;
|
|
||||||
optional AvatarColor avatarColor = 7;
|
|
||||||
|
|
||||||
// These are simply plaintext copies of the groups proto from Groups.proto.
|
|
||||||
// They should be kept completely in-sync with Groups.proto.
|
|
||||||
// These exist to allow us to have the latest snapshot of a group during restoration without having to hit the network.
|
|
||||||
// We would use Groups.proto if we could, but we want a plaintext version to improve export readability.
|
|
||||||
// For documentation, defer to Groups.proto. The only name change is Group -> GroupSnapshot to avoid the naming conflict.
|
|
||||||
message GroupSnapshot {
|
message GroupSnapshot {
|
||||||
reserved 1; // The field is deprecated in the context of static group state // publicKey
|
= 1; // The field is deprecated in the context of static group state // publicKey
|
||||||
GroupAttributeBlob title = 2;
|
GroupAttributeBlob title = 2;
|
||||||
GroupAttributeBlob description = 11;
|
GroupAttributeBlob description = 11;
|
||||||
string avatarUrl = 3;
|
string avatarUrl = 3;
|
||||||
|
@ -244,49 +215,42 @@ message Group {
|
||||||
bool announcements_only = 12;
|
bool announcements_only = 12;
|
||||||
repeated MemberBanned members_banned = 13;
|
repeated MemberBanned members_banned = 13;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GroupAttributeBlob {
|
message GroupAttributeBlob {
|
||||||
// If unset, consider the field it represents to not be present
|
|
||||||
oneof content {
|
oneof content {
|
||||||
string title = 1;
|
string title = 1;
|
||||||
bytes avatar = 2;
|
bytes avatar = 2;
|
||||||
uint32 disappearingMessagesDuration = 3;
|
uint32 disappearingMessagesDuration = 3;
|
||||||
string descriptionText = 4;
|
string descriptionText = 4;
|
||||||
}
|
}
|
||||||
|
// If unset, consider the field it represents to not be present
|
||||||
}
|
}
|
||||||
|
|
||||||
message Member {
|
message Member {
|
||||||
enum Role {
|
enum Role {
|
||||||
UNKNOWN = 0; // Intepret as "Default"
|
UNKNOWN = 0; // Intepret as "Default"
|
||||||
DEFAULT = 1;
|
DEFAULT = 1;
|
||||||
ADMINISTRATOR = 2;
|
ADMINISTRATOR = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes userId = 1;
|
bytes userId = 1;
|
||||||
Role role = 2;
|
Role role = 2;
|
||||||
reserved 3; // This field is ignored in Backups, in favor of Contact frames for members // profileKey
|
= 3; // This field is ignored in Backups, in favor of Contact frames for members // profileKey
|
||||||
reserved 4; // This field is deprecated in the context of static group state // presentation
|
= 4; // This field is deprecated in the context of static group state // presentation
|
||||||
uint32 joinedAtVersion = 5;
|
uint32 joinedAtVersion = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
message MemberPendingProfileKey {
|
message MemberPendingProfileKey {
|
||||||
Member member = 1;
|
Member member = 1;
|
||||||
bytes addedByUserId = 2;
|
bytes addedByUserId = 2;
|
||||||
uint64 timestamp = 3;
|
uint64 timestamp = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message MemberPendingAdminApproval {
|
message MemberPendingAdminApproval {
|
||||||
bytes userId = 1;
|
bytes userId = 1;
|
||||||
reserved 2; // This field is ignored in Backups, in favor of Contact frames for members // profileKey
|
= 2; // This field is ignored in Backups, in favor of Contact frames for members // profileKey
|
||||||
reserved 3; // This field is deprecated in the context of static group state // presentation
|
= 3; // This field is deprecated in the context of static group state // presentation
|
||||||
uint64 timestamp = 4;
|
uint64 timestamp = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message MemberBanned {
|
message MemberBanned {
|
||||||
bytes userId = 1;
|
bytes userId = 1;
|
||||||
uint64 timestamp = 2;
|
uint64 timestamp = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message AccessControl {
|
message AccessControl {
|
||||||
enum AccessRequired {
|
enum AccessRequired {
|
||||||
UNKNOWN = 0; // Intepret as "Unsatisfiable"
|
UNKNOWN = 0; // Intepret as "Unsatisfiable"
|
||||||
|
@ -300,14 +264,25 @@ message Group {
|
||||||
AccessRequired members = 2;
|
AccessRequired members = 2;
|
||||||
AccessRequired addFromInviteLink = 3;
|
AccessRequired addFromInviteLink = 3;
|
||||||
}
|
}
|
||||||
}
|
bytes masterKey = 1;
|
||||||
|
bool whitelisted = 2;
|
||||||
|
bool hideStory = 3;
|
||||||
|
StorySendMode storySendMode = 4;
|
||||||
|
GroupSnapshot snapshot = 5;
|
||||||
|
bool blocked = 6;
|
||||||
|
optional AvatarColor avatarColor = 7;
|
||||||
|
|
||||||
|
// These are simply plaintext copies of the groups proto from Groups.proto.
|
||||||
|
// They should be kept completely in-sync with Groups.proto.
|
||||||
|
// These exist to allow us to have the latest snapshot of a group during restoration without having to hit the network.
|
||||||
|
// We would use Groups.proto if we could, but we want a plaintext version to improve export readability.
|
||||||
|
// For documentation, defer to Groups.proto. The only name change is Group -> GroupSnapshot to avoid the naming conflict.
|
||||||
|
}
|
||||||
message Self {
|
message Self {
|
||||||
optional AvatarColor avatarColor = 1;
|
optional AvatarColor avatarColor = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ReleaseNotes {}
|
// isEmpty
|
||||||
|
|
||||||
message Chat {
|
message Chat {
|
||||||
uint64 id = 1; // generated id for reference only within this file
|
uint64 id = 1; // generated id for reference only within this file
|
||||||
uint64 recipientId = 2;
|
uint64 recipientId = 2;
|
||||||
|
@ -342,7 +317,6 @@ message CallLink {
|
||||||
Restrictions restrictions = 4;
|
Restrictions restrictions = 4;
|
||||||
uint64 expirationMs = 5;
|
uint64 expirationMs = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
message AdHocCall {
|
message AdHocCall {
|
||||||
enum State {
|
enum State {
|
||||||
UNKNOWN_STATE = 0; // Interpret as "Generic"
|
UNKNOWN_STATE = 0; // Interpret as "Generic"
|
||||||
|
@ -355,19 +329,18 @@ message AdHocCall {
|
||||||
State state = 3;
|
State state = 3;
|
||||||
uint64 callTimestamp = 4;
|
uint64 callTimestamp = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message DistributionListItem {
|
message DistributionListItem {
|
||||||
|
oneof item {
|
||||||
|
uint64 deletionTimestamp = 2;
|
||||||
|
DistributionList distributionList = 3;
|
||||||
|
}
|
||||||
|
|
||||||
// distribution ids are UUIDv4s. "My Story" is represented
|
// distribution ids are UUIDv4s. "My Story" is represented
|
||||||
// by an all-0 UUID (00000000-0000-0000-0000-000000000000).
|
// by an all-0 UUID (00000000-0000-0000-0000-000000000000).
|
||||||
bytes distributionId = 1; // distribution list ids are uuids
|
bytes distributionId = 1; // distribution list ids are uuids
|
||||||
|
|
||||||
// If unset, importers should skip the item entirely without showing an error.
|
// If unset, importers should skip the item entirely without showing an error.
|
||||||
oneof item {
|
|
||||||
uint64 deletionTimestamp = 2;
|
|
||||||
DistributionList distributionList = 3;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
message DistributionList {
|
message DistributionList {
|
||||||
enum PrivacyMode {
|
enum PrivacyMode {
|
||||||
UNKNOWN = 0; // Interpret as "Only with"
|
UNKNOWN = 0; // Interpret as "Only with"
|
||||||
|
@ -381,7 +354,6 @@ message DistributionList {
|
||||||
PrivacyMode privacyMode = 3;
|
PrivacyMode privacyMode = 3;
|
||||||
repeated uint64 memberRecipientIds = 4; // generated recipient id
|
repeated uint64 memberRecipientIds = 4; // generated recipient id
|
||||||
}
|
}
|
||||||
|
|
||||||
message ChatItem {
|
message ChatItem {
|
||||||
message IncomingMessageDetails {
|
message IncomingMessageDetails {
|
||||||
uint64 dateReceived = 1;
|
uint64 dateReceived = 1;
|
||||||
|
@ -389,30 +361,16 @@ message ChatItem {
|
||||||
bool read = 3;
|
bool read = 3;
|
||||||
bool sealedSender = 4;
|
bool sealedSender = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message OutgoingMessageDetails {
|
message OutgoingMessageDetails {
|
||||||
repeated SendStatus sendStatus = 1;
|
repeated SendStatus sendStatus = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message DirectionlessMessageDetails {
|
message DirectionlessMessageDetails {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64 chatId = 1; // conversation id
|
|
||||||
uint64 authorId = 2; // recipient id
|
|
||||||
uint64 dateSent = 3;
|
|
||||||
optional uint64 expireStartDate = 4; // timestamp of when expiration timer started ticking down
|
|
||||||
optional uint64 expiresInMs = 5; // how long timer of message is (ms)
|
|
||||||
repeated ChatItem revisions = 6; // ordered from oldest to newest
|
|
||||||
bool sms = 7;
|
|
||||||
|
|
||||||
// If unset, importers should skip this item without throwing an error.
|
|
||||||
oneof directionalDetails {
|
oneof directionalDetails {
|
||||||
IncomingMessageDetails incoming = 8;
|
IncomingMessageDetails incoming = 8;
|
||||||
OutgoingMessageDetails outgoing = 9;
|
OutgoingMessageDetails outgoing = 9;
|
||||||
DirectionlessMessageDetails directionless = 10;
|
DirectionlessMessageDetails directionless = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If unset, importers should skip this item without throwing an error.
|
|
||||||
oneof item {
|
oneof item {
|
||||||
StandardMessage standardMessage = 11;
|
StandardMessage standardMessage = 11;
|
||||||
ContactMessage contactMessage = 12;
|
ContactMessage contactMessage = 12;
|
||||||
|
@ -424,11 +382,22 @@ message ChatItem {
|
||||||
ViewOnceMessage viewOnceMessage = 18;
|
ViewOnceMessage viewOnceMessage = 18;
|
||||||
DirectStoryReplyMessage directStoryReplyMessage = 19; // group story reply messages are not backed up
|
DirectStoryReplyMessage directStoryReplyMessage = 19; // group story reply messages are not backed up
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64 chatId = 1; // conversation id
|
||||||
|
uint64 authorId = 2; // recipient id
|
||||||
|
uint64 dateSent = 3;
|
||||||
|
optional uint64 expireStartDate = 4; // timestamp of when expiration timer started ticking down
|
||||||
|
optional uint64 expiresInMs = 5; // how long timer of message is (ms)
|
||||||
|
repeated ChatItem revisions = 6; // ordered from oldest to newest
|
||||||
|
bool sms = 7;
|
||||||
|
|
||||||
|
// If unset, importers should skip this item without throwing an error.
|
||||||
|
|
||||||
|
// If unset, importers should skip this item without throwing an error.
|
||||||
}
|
}
|
||||||
|
|
||||||
message SendStatus {
|
message SendStatus {
|
||||||
message Pending {}
|
// isEmpty
|
||||||
|
// footer was empty
|
||||||
message Sent {
|
message Sent {
|
||||||
bool sealedSender = 1;
|
bool sealedSender = 1;
|
||||||
}
|
}
|
||||||
|
@ -472,7 +441,6 @@ message SendStatus {
|
||||||
Failed failed = 9;
|
Failed failed = 9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
message Text {
|
message Text {
|
||||||
string body = 1;
|
string body = 1;
|
||||||
repeated BodyRange bodyRanges = 2;
|
repeated BodyRange bodyRanges = 2;
|
||||||
|
@ -497,24 +465,22 @@ message DirectStoryReplyMessage {
|
||||||
Text text = 1;
|
Text text = 1;
|
||||||
FilePointer longText = 2;
|
FilePointer longText = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If unset, importers should ignore the message without throwing an error.
|
|
||||||
oneof reply {
|
oneof reply {
|
||||||
TextReply textReply = 1;
|
TextReply textReply = 1;
|
||||||
string emoji = 2;
|
string emoji = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
repeated Reaction reactions = 3;
|
// If unset, importers should ignore the message without throwing an error.
|
||||||
reserved 4; // storySentTimestamp
|
|
||||||
}
|
|
||||||
|
|
||||||
|
repeated Reaction reactions = 3;
|
||||||
|
= 4; // storySentTimestamp
|
||||||
|
}
|
||||||
message PaymentNotification {
|
message PaymentNotification {
|
||||||
message TransactionDetails {
|
message TransactionDetails {
|
||||||
message MobileCoinTxoIdentification { // Used to map to payments on the ledger
|
message MobileCoinTxoIdentification { // Used to map to payments on the ledger
|
||||||
repeated bytes publicKey = 1; // for received transactions
|
repeated bytes publicKey = 1; // for received transactions
|
||||||
repeated bytes keyImages = 2; // for sent transactions
|
repeated bytes keyImages = 2; // for sent transactions
|
||||||
}
|
}
|
||||||
|
|
||||||
message FailedTransaction { // Failed payments can't be synced from the ledger
|
message FailedTransaction { // Failed payments can't be synced from the ledger
|
||||||
enum FailureReason {
|
enum FailureReason {
|
||||||
GENERIC = 0; // A valid value -- reason unknown
|
GENERIC = 0; // A valid value -- reason unknown
|
||||||
|
@ -523,7 +489,6 @@ message PaymentNotification {
|
||||||
}
|
}
|
||||||
FailureReason reason = 1;
|
FailureReason reason = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Transaction {
|
message Transaction {
|
||||||
enum Status {
|
enum Status {
|
||||||
INITIAL = 0; // A valid value -- state unconfirmed
|
INITIAL = 0; // A valid value -- state unconfirmed
|
||||||
|
@ -542,20 +507,18 @@ message PaymentNotification {
|
||||||
optional bytes transaction = 6; // mobile coin blobs
|
optional bytes transaction = 6; // mobile coin blobs
|
||||||
optional bytes receipt = 7; // mobile coin blobs
|
optional bytes receipt = 7; // mobile coin blobs
|
||||||
}
|
}
|
||||||
|
|
||||||
// If unset, importers should treat the transaction as successful with no metadata.
|
|
||||||
oneof payment {
|
oneof payment {
|
||||||
Transaction transaction = 1;
|
Transaction transaction = 1;
|
||||||
FailedTransaction failedTransaction = 2;
|
FailedTransaction failedTransaction = 2;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
// If unset, importers should treat the transaction as successful with no metadata.
|
||||||
|
}
|
||||||
optional string amountMob = 1; // stored as a decimal string, e.g. 1.00001
|
optional string amountMob = 1; // stored as a decimal string, e.g. 1.00001
|
||||||
optional string feeMob = 2; // stored as a decimal string, e.g. 1.00001
|
optional string feeMob = 2; // stored as a decimal string, e.g. 1.00001
|
||||||
optional string note = 3;
|
optional string note = 3;
|
||||||
TransactionDetails transactionDetails = 4;
|
TransactionDetails transactionDetails = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GiftBadge {
|
message GiftBadge {
|
||||||
enum State {
|
enum State {
|
||||||
UNOPENED = 0; // A valid state
|
UNOPENED = 0; // A valid state
|
||||||
|
@ -567,7 +530,6 @@ message GiftBadge {
|
||||||
bytes receiptCredentialPresentation = 1;
|
bytes receiptCredentialPresentation = 1;
|
||||||
State state = 2;
|
State state = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ViewOnceMessage {
|
message ViewOnceMessage {
|
||||||
// Will be null for viewed messages
|
// Will be null for viewed messages
|
||||||
MessageAttachment attachment = 1;
|
MessageAttachment attachment = 1;
|
||||||
|
@ -583,7 +545,6 @@ message ContactAttachment {
|
||||||
string middleName = 5;
|
string middleName = 5;
|
||||||
string nickname = 6;
|
string nickname = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Phone {
|
message Phone {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0; // Interpret as "Home"
|
UNKNOWN = 0; // Interpret as "Home"
|
||||||
|
@ -592,12 +553,10 @@ message ContactAttachment {
|
||||||
WORK = 3;
|
WORK = 3;
|
||||||
CUSTOM = 4;
|
CUSTOM = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
string value = 1;
|
string value = 1;
|
||||||
Type type = 2;
|
Type type = 2;
|
||||||
string label = 3;
|
string label = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Email {
|
message Email {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0; // Intepret as "Home"
|
UNKNOWN = 0; // Intepret as "Home"
|
||||||
|
@ -606,12 +565,10 @@ message ContactAttachment {
|
||||||
WORK = 3;
|
WORK = 3;
|
||||||
CUSTOM = 4;
|
CUSTOM = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
string value = 1;
|
string value = 1;
|
||||||
Type type = 2;
|
Type type = 2;
|
||||||
string label = 3;
|
string label = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message PostalAddress {
|
message PostalAddress {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0; // Interpret as "Home"
|
UNKNOWN = 0; // Interpret as "Home"
|
||||||
|
@ -630,7 +587,6 @@ message ContactAttachment {
|
||||||
string postcode = 8;
|
string postcode = 8;
|
||||||
string country = 9;
|
string country = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
optional Name name = 1;
|
optional Name name = 1;
|
||||||
repeated Phone number = 3;
|
repeated Phone number = 3;
|
||||||
repeated Email email = 4;
|
repeated Email email = 4;
|
||||||
|
@ -638,15 +594,12 @@ message ContactAttachment {
|
||||||
optional FilePointer avatar = 6;
|
optional FilePointer avatar = 6;
|
||||||
string organization = 7;
|
string organization = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message StickerMessage {
|
message StickerMessage {
|
||||||
Sticker sticker = 1;
|
Sticker sticker = 1;
|
||||||
repeated Reaction reactions = 2;
|
repeated Reaction reactions = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tombstone for remote delete
|
// isEmpty
|
||||||
message RemoteDeletedMessage {}
|
|
||||||
|
|
||||||
message Sticker {
|
message Sticker {
|
||||||
bytes packId = 1;
|
bytes packId = 1;
|
||||||
bytes packKey = 2;
|
bytes packKey = 2;
|
||||||
|
@ -670,9 +623,6 @@ message LinkPreview {
|
||||||
// A FilePointer on a message that has additional
|
// A FilePointer on a message that has additional
|
||||||
// metadata that applies only to message attachments.
|
// metadata that applies only to message attachments.
|
||||||
message MessageAttachment {
|
message MessageAttachment {
|
||||||
// Similar to SignalService.AttachmentPointer.Flags,
|
|
||||||
// but explicitly mutually exclusive. Note the different raw values
|
|
||||||
// (non-zero starting values are not supported in proto3.)
|
|
||||||
enum Flag {
|
enum Flag {
|
||||||
NONE = 0; // A valid value -- no flag applied
|
NONE = 0; // A valid value -- no flag applied
|
||||||
VOICE_MESSAGE = 1;
|
VOICE_MESSAGE = 1;
|
||||||
|
@ -680,6 +630,10 @@ message MessageAttachment {
|
||||||
GIF = 3;
|
GIF = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Similar to SignalService.AttachmentPointer.Flags,
|
||||||
|
// but explicitly mutually exclusive. Note the different raw values
|
||||||
|
// (non-zero starting values are not supported in proto3.)
|
||||||
|
|
||||||
FilePointer pointer = 1;
|
FilePointer pointer = 1;
|
||||||
Flag flag = 2;
|
Flag flag = 2;
|
||||||
bool wasDownloaded = 3;
|
bool wasDownloaded = 3;
|
||||||
|
@ -687,9 +641,7 @@ message MessageAttachment {
|
||||||
// owning message. See: SignalService.AttachmentPointer.clientUuid.
|
// owning message. See: SignalService.AttachmentPointer.clientUuid.
|
||||||
optional bytes clientUuid = 4;
|
optional bytes clientUuid = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message FilePointer {
|
message FilePointer {
|
||||||
// References attachments in the backup (media) storage tier.
|
|
||||||
message BackupLocator {
|
message BackupLocator {
|
||||||
string mediaName = 1;
|
string mediaName = 1;
|
||||||
// If present, the cdn number of the succesful upload.
|
// If present, the cdn number of the succesful upload.
|
||||||
|
@ -703,11 +655,6 @@ message FilePointer {
|
||||||
optional string transitCdnKey = 6;
|
optional string transitCdnKey = 6;
|
||||||
optional uint32 transitCdnNumber = 7;
|
optional uint32 transitCdnNumber = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
// References attachments in the transit storage tier.
|
|
||||||
// May be downloaded or not when the backup is generated;
|
|
||||||
// primarily for free-tier users who cannot copy the
|
|
||||||
// attachments to the backup (media) storage tier.
|
|
||||||
message AttachmentLocator {
|
message AttachmentLocator {
|
||||||
string cdnKey = 1;
|
string cdnKey = 1;
|
||||||
uint32 cdnNumber = 2;
|
uint32 cdnNumber = 2;
|
||||||
|
@ -716,21 +663,28 @@ message FilePointer {
|
||||||
bytes digest = 5;
|
bytes digest = 5;
|
||||||
uint32 size = 6;
|
uint32 size = 6;
|
||||||
}
|
}
|
||||||
|
message InvalidAttachmentLocator {
|
||||||
|
}
|
||||||
|
oneof locator {
|
||||||
|
BackupLocator backupLocator = 1;
|
||||||
|
AttachmentLocator attachmentLocator = 2;
|
||||||
|
InvalidAttachmentLocator invalidAttachmentLocator = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// References attachments in the backup (media) storage tier.
|
||||||
|
|
||||||
|
// References attachments in the transit storage tier.
|
||||||
|
// May be downloaded or not when the backup is generated;
|
||||||
|
// primarily for free-tier users who cannot copy the
|
||||||
|
// attachments to the backup (media) storage tier.
|
||||||
|
|
||||||
// References attachments that are invalid in such a way where download
|
// References attachments that are invalid in such a way where download
|
||||||
// cannot be attempted. Could range from missing digests to missing
|
// cannot be attempted. Could range from missing digests to missing
|
||||||
// CDN keys or anything else that makes download attempts impossible.
|
// CDN keys or anything else that makes download attempts impossible.
|
||||||
// This serves as a 'tombstone' so that the UX can show that an attachment
|
// This serves as a 'tombstone' so that the UX can show that an attachment
|
||||||
// did exist, but for whatever reason it's not retrievable.
|
// did exist, but for whatever reason it's not retrievable.
|
||||||
message InvalidAttachmentLocator {
|
|
||||||
}
|
|
||||||
|
|
||||||
// If unset, importers should consider it to be an InvalidAttachmentLocator without throwing an error.
|
// If unset, importers should consider it to be an InvalidAttachmentLocator without throwing an error.
|
||||||
oneof locator {
|
|
||||||
BackupLocator backupLocator = 1;
|
|
||||||
AttachmentLocator attachmentLocator = 2;
|
|
||||||
InvalidAttachmentLocator invalidAttachmentLocator = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
optional string contentType = 4;
|
optional string contentType = 4;
|
||||||
optional bytes incrementalMac = 5;
|
optional bytes incrementalMac = 5;
|
||||||
|
@ -741,7 +695,6 @@ message FilePointer {
|
||||||
optional string caption = 10;
|
optional string caption = 10;
|
||||||
optional string blurHash = 11;
|
optional string blurHash = 11;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Quote {
|
message Quote {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0; // Interpret as "Normal"
|
UNKNOWN = 0; // Interpret as "Normal"
|
||||||
|
@ -749,7 +702,6 @@ message Quote {
|
||||||
GIFT_BADGE = 2;
|
GIFT_BADGE = 2;
|
||||||
VIEW_ONCE = 3;
|
VIEW_ONCE = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message QuotedAttachment {
|
message QuotedAttachment {
|
||||||
optional string contentType = 1;
|
optional string contentType = 1;
|
||||||
optional string fileName = 2;
|
optional string fileName = 2;
|
||||||
|
@ -762,7 +714,6 @@ message Quote {
|
||||||
repeated QuotedAttachment attachments = 4;
|
repeated QuotedAttachment attachments = 4;
|
||||||
Type type = 5;
|
Type type = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
message BodyRange {
|
message BodyRange {
|
||||||
enum Style {
|
enum Style {
|
||||||
NONE = 0; // Importers should ignore the body range without throwing an error.
|
NONE = 0; // Importers should ignore the body range without throwing an error.
|
||||||
|
@ -772,6 +723,10 @@ message BodyRange {
|
||||||
STRIKETHROUGH = 4;
|
STRIKETHROUGH = 4;
|
||||||
MONOSPACE = 5;
|
MONOSPACE = 5;
|
||||||
}
|
}
|
||||||
|
oneof associatedValue {
|
||||||
|
bytes mentionAci = 3;
|
||||||
|
Style style = 4;
|
||||||
|
}
|
||||||
|
|
||||||
// 'start' and 'length' are measured in UTF-16 code units.
|
// 'start' and 'length' are measured in UTF-16 code units.
|
||||||
// They may refer to offsets in a longText attachment.
|
// They may refer to offsets in a longText attachment.
|
||||||
|
@ -779,12 +734,7 @@ message BodyRange {
|
||||||
uint32 length = 2;
|
uint32 length = 2;
|
||||||
|
|
||||||
// If unset, importers should ignore the body range without throwing an error.
|
// If unset, importers should ignore the body range without throwing an error.
|
||||||
oneof associatedValue {
|
|
||||||
bytes mentionAci = 3;
|
|
||||||
Style style = 4;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
message Reaction {
|
message Reaction {
|
||||||
string emoji = 1;
|
string emoji = 1;
|
||||||
uint64 authorId = 2;
|
uint64 authorId = 2;
|
||||||
|
@ -795,7 +745,6 @@ message Reaction {
|
||||||
}
|
}
|
||||||
|
|
||||||
message ChatUpdateMessage {
|
message ChatUpdateMessage {
|
||||||
// If unset, importers should ignore the update message without throwing an error.
|
|
||||||
oneof update {
|
oneof update {
|
||||||
SimpleChatUpdate simpleUpdate = 1;
|
SimpleChatUpdate simpleUpdate = 1;
|
||||||
GroupChangeChatUpdate groupChange = 2;
|
GroupChangeChatUpdate groupChange = 2;
|
||||||
|
@ -807,21 +756,20 @@ message ChatUpdateMessage {
|
||||||
GroupCall groupCall = 8;
|
GroupCall groupCall = 8;
|
||||||
LearnedProfileChatUpdate learnedProfileChange = 9;
|
LearnedProfileChatUpdate learnedProfileChange = 9;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
// If unset, importers should ignore the update message without throwing an error.
|
||||||
|
}
|
||||||
message IndividualCall {
|
message IndividualCall {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN_TYPE = 0; // Interpret as "Audio call"
|
UNKNOWN_TYPE = 0; // Interpret as "Audio call"
|
||||||
AUDIO_CALL = 1;
|
AUDIO_CALL = 1;
|
||||||
VIDEO_CALL = 2;
|
VIDEO_CALL = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Direction {
|
enum Direction {
|
||||||
UNKNOWN_DIRECTION = 0; // Interpret as "Incoming"
|
UNKNOWN_DIRECTION = 0; // Interpret as "Incoming"
|
||||||
INCOMING = 1;
|
INCOMING = 1;
|
||||||
OUTGOING = 2;
|
OUTGOING = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
UNKNOWN_STATE = 0; // Interpret as "Accepted"
|
UNKNOWN_STATE = 0; // Interpret as "Accepted"
|
||||||
ACCEPTED = 1;
|
ACCEPTED = 1;
|
||||||
|
@ -841,7 +789,6 @@ message IndividualCall {
|
||||||
uint64 startedCallTimestamp = 5;
|
uint64 startedCallTimestamp = 5;
|
||||||
bool read = 6;
|
bool read = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GroupCall {
|
message GroupCall {
|
||||||
enum State {
|
enum State {
|
||||||
UNKNOWN_STATE = 0; // Interpret as "Generic"
|
UNKNOWN_STATE = 0; // Interpret as "Generic"
|
||||||
|
@ -872,7 +819,6 @@ message GroupCall {
|
||||||
optional uint64 endedCallTimestamp = 6; // The time the call ended.
|
optional uint64 endedCallTimestamp = 6; // The time the call ended.
|
||||||
bool read = 7;
|
bool read = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SimpleChatUpdate {
|
message SimpleChatUpdate {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0; // Importers should skip the update without throwing an error.
|
UNKNOWN = 0; // Importers should skip the update without throwing an error.
|
||||||
|
@ -896,7 +842,6 @@ message SimpleChatUpdate {
|
||||||
|
|
||||||
Type type = 1;
|
Type type = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For 1:1 chat updates only.
|
// For 1:1 chat updates only.
|
||||||
// For group thread updates use GroupExpirationTimerUpdate.
|
// For group thread updates use GroupExpirationTimerUpdate.
|
||||||
message ExpirationTimerChatUpdate {
|
message ExpirationTimerChatUpdate {
|
||||||
|
@ -909,13 +854,13 @@ message ProfileChangeChatUpdate {
|
||||||
}
|
}
|
||||||
|
|
||||||
message LearnedProfileChatUpdate {
|
message LearnedProfileChatUpdate {
|
||||||
// If unset, importers should consider the previous name to be an empty string.
|
|
||||||
oneof previousName {
|
oneof previousName {
|
||||||
uint64 e164 = 1;
|
uint64 e164 = 1;
|
||||||
string username = 2;
|
string username = 2;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
// If unset, importers should consider the previous name to be an empty string.
|
||||||
|
}
|
||||||
message ThreadMergeChatUpdate {
|
message ThreadMergeChatUpdate {
|
||||||
uint64 previousE164 = 1;
|
uint64 previousE164 = 1;
|
||||||
}
|
}
|
||||||
|
@ -926,7 +871,6 @@ message SessionSwitchoverChatUpdate {
|
||||||
|
|
||||||
message GroupChangeChatUpdate {
|
message GroupChangeChatUpdate {
|
||||||
message Update {
|
message Update {
|
||||||
// If unset, importers should consider it to be a GenericGroupUpdate with unset updaterAci
|
|
||||||
oneof update {
|
oneof update {
|
||||||
GenericGroupUpdate genericGroupUpdate = 1;
|
GenericGroupUpdate genericGroupUpdate = 1;
|
||||||
GroupCreationUpdate groupCreationUpdate = 2;
|
GroupCreationUpdate groupCreationUpdate = 2;
|
||||||
|
@ -963,13 +907,13 @@ message GroupChangeChatUpdate {
|
||||||
GroupSequenceOfRequestsAndCancelsUpdate groupSequenceOfRequestsAndCancelsUpdate = 33;
|
GroupSequenceOfRequestsAndCancelsUpdate groupSequenceOfRequestsAndCancelsUpdate = 33;
|
||||||
GroupExpirationTimerUpdate groupExpirationTimerUpdate = 34;
|
GroupExpirationTimerUpdate groupExpirationTimerUpdate = 34;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
// If unset, importers should consider it to be a GenericGroupUpdate with unset updaterAci
|
||||||
|
}
|
||||||
// Must be one or more; all updates batched together came from
|
// Must be one or more; all updates batched together came from
|
||||||
// a single batched group state update.
|
// a single batched group state update.
|
||||||
repeated Update updates = 1;
|
repeated Update updates = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GenericGroupUpdate {
|
message GenericGroupUpdate {
|
||||||
optional bytes updaterAci = 1;
|
optional bytes updaterAci = 1;
|
||||||
}
|
}
|
||||||
|
@ -1095,7 +1039,6 @@ message GroupInvitationRevokedUpdate {
|
||||||
optional bytes updaterAci = 1;
|
optional bytes updaterAci = 1;
|
||||||
repeated Invitee invitees = 2;
|
repeated Invitee invitees = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GroupJoinRequestUpdate {
|
message GroupJoinRequestUpdate {
|
||||||
bytes requestorAci = 1;
|
bytes requestorAci = 1;
|
||||||
}
|
}
|
||||||
|
@ -1144,13 +1087,8 @@ message GroupMemberJoinedByLinkUpdate {
|
||||||
bytes newMemberAci = 1;
|
bytes newMemberAci = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// A gv1->gv2 migration occurred.
|
// isEmpty
|
||||||
message GroupV2MigrationUpdate {}
|
// isEmpty
|
||||||
|
|
||||||
// Another user migrated gv1->gv2 but was unable to add
|
|
||||||
// the local user and invited them instead.
|
|
||||||
message GroupV2MigrationSelfInvitedUpdate {}
|
|
||||||
|
|
||||||
// The local user migrated gv1->gv2 but was unable to
|
// The local user migrated gv1->gv2 but was unable to
|
||||||
// add some members and invited them instead.
|
// add some members and invited them instead.
|
||||||
// (Happens if we don't have the invitee's profile key)
|
// (Happens if we don't have the invitee's profile key)
|
||||||
|
@ -1182,20 +1120,17 @@ message ChatStyle {
|
||||||
repeated fixed32 colors = 2; // 0xAARRGGBB
|
repeated fixed32 colors = 2; // 0xAARRGGBB
|
||||||
repeated float positions = 3; // percent from 0 to 1
|
repeated float positions = 3; // percent from 0 to 1
|
||||||
}
|
}
|
||||||
|
|
||||||
message CustomChatColor {
|
message CustomChatColor {
|
||||||
uint64 id = 1;
|
|
||||||
|
|
||||||
// If unset, use the default chat color
|
|
||||||
oneof color {
|
oneof color {
|
||||||
fixed32 solid = 2; // 0xAARRGGBB
|
fixed32 solid = 2; // 0xAARRGGBB
|
||||||
Gradient gradient = 3;
|
Gradient gradient = 3;
|
||||||
}
|
}
|
||||||
}
|
uint64 id = 1;
|
||||||
|
|
||||||
|
// If unset, use the default chat color
|
||||||
|
}
|
||||||
message AutomaticBubbleColor {
|
message AutomaticBubbleColor {
|
||||||
}
|
}
|
||||||
|
|
||||||
enum WallpaperPreset {
|
enum WallpaperPreset {
|
||||||
UNKNOWN_WALLPAPER_PRESET = 0; // Interpret as the wallpaper being unset
|
UNKNOWN_WALLPAPER_PRESET = 0; // Interpret as the wallpaper being unset
|
||||||
SOLID_BLUSH = 1;
|
SOLID_BLUSH = 1;
|
||||||
|
@ -1220,7 +1155,6 @@ message ChatStyle {
|
||||||
GRADIENT_SKY = 20;
|
GRADIENT_SKY = 20;
|
||||||
GRADIENT_PEACH = 21;
|
GRADIENT_PEACH = 21;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum BubbleColorPreset {
|
enum BubbleColorPreset {
|
||||||
UNKNOWN_BUBBLE_COLOR_PRESET = 0; // Interpret as the user's default chat bubble color
|
UNKNOWN_BUBBLE_COLOR_PRESET = 0; // Interpret as the user's default chat bubble color
|
||||||
SOLID_ULTRAMARINE = 1;
|
SOLID_ULTRAMARINE = 1;
|
||||||
|
@ -1246,16 +1180,12 @@ message ChatStyle {
|
||||||
GRADIENT_SEA = 21;
|
GRADIENT_SEA = 21;
|
||||||
GRADIENT_TANGERINE = 22;
|
GRADIENT_TANGERINE = 22;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If unset, importers should consider there to be no wallpaper.
|
|
||||||
oneof wallpaper {
|
oneof wallpaper {
|
||||||
WallpaperPreset wallpaperPreset = 1;
|
WallpaperPreset wallpaperPreset = 1;
|
||||||
// This `FilePointer` is expected not to contain a `fileName`, `width`,
|
// This `FilePointer` is expected not to contain a `fileName`, `width`,
|
||||||
// `height`, or `caption`.
|
// `height`, or `caption`.
|
||||||
FilePointer wallpaperPhoto = 2;
|
FilePointer wallpaperPhoto = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If unset, importers should consider it to be AutomaticBubbleColor
|
|
||||||
oneof bubbleColor {
|
oneof bubbleColor {
|
||||||
// Bubble setting is automatically determined based on the wallpaper setting,
|
// Bubble setting is automatically determined based on the wallpaper setting,
|
||||||
// or `SOLID_ULTRAMARINE` for `noWallpaper`
|
// or `SOLID_ULTRAMARINE` for `noWallpaper`
|
||||||
|
@ -1266,9 +1196,12 @@ message ChatStyle {
|
||||||
uint64 customColorId = 5;
|
uint64 customColorId = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If unset, importers should consider there to be no wallpaper.
|
||||||
|
|
||||||
|
// If unset, importers should consider it to be AutomaticBubbleColor
|
||||||
|
|
||||||
bool dimWallpaperInDarkMode = 7;
|
bool dimWallpaperInDarkMode = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message NotificationProfile {
|
message NotificationProfile {
|
||||||
enum DayOfWeek {
|
enum DayOfWeek {
|
||||||
UNKNOWN = 0; // Interpret as "Monday"
|
UNKNOWN = 0; // Interpret as "Monday"
|
||||||
|
@ -1293,15 +1226,15 @@ message NotificationProfile {
|
||||||
uint32 scheduleEndTime = 10; // 24-hour clock int, 0000-2359 (e.g., 15, 900, 1130, 2345)
|
uint32 scheduleEndTime = 10; // 24-hour clock int, 0000-2359 (e.g., 15, 900, 1130, 2345)
|
||||||
repeated DayOfWeek scheduleDaysEnabled = 11;
|
repeated DayOfWeek scheduleDaysEnabled = 11;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ChatFolder {
|
message ChatFolder {
|
||||||
// Represents the default "All chats" folder record vs all other custom folders
|
|
||||||
enum FolderType {
|
enum FolderType {
|
||||||
UNKNOWN = 0; // Interpret as "Custom"
|
UNKNOWN = 0; // Interpret as "Custom"
|
||||||
ALL = 1;
|
ALL = 1;
|
||||||
CUSTOM = 2;
|
CUSTOM = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Represents the default "All chats" folder record vs all other custom folders
|
||||||
|
|
||||||
string name = 1;
|
string name = 1;
|
||||||
bool showOnlyUnread = 2;
|
bool showOnlyUnread = 2;
|
||||||
bool showMutedChats = 3;
|
bool showMutedChats = 3;
|
||||||
|
@ -1313,3 +1246,4 @@ message ChatFolder {
|
||||||
repeated uint64 includedRecipientIds = 7; // generated recipient id of groups, contacts, and/or note to self
|
repeated uint64 includedRecipientIds = 7; // generated recipient id of groups, contacts, and/or note to self
|
||||||
repeated uint64 excludedRecipientIds = 8; // generated recipient id of groups, contacts, and/or note to self
|
repeated uint64 excludedRecipientIds = 8; // generated recipient id of groups, contacts, and/or note to self
|
||||||
}
|
}
|
||||||
|
// footer was empty
|
||||||
|
|
Loading…
Reference in New Issue