Skip to content
Snippets Groups Projects
Select Git revision
  • main
  • showSr25519Key
  • try
  • 1.15.0
4 results

SignalService.proto

Blame
  • SignalService.proto 9.89 KiB
    package signalservice;
    syntax = "proto2";
    
    
    message Envelope {
    
      enum Type {
        SESSION_MESSAGE = 6;
        CLOSED_GROUP_MESSAGE = 7;
      }
    
      // @required
      required Type   type            = 1;
      optional string source          = 2;
      // @required
      required uint64 timestamp       = 5;
      optional bytes  content         = 8;
    }
    
    message TypingMessage {
    
        enum Action {
            STARTED = 0;
            STOPPED = 1;
        }
    
        required uint64 timestamp = 1;
        required Action action    = 2;
    }
    
    
    message Unsend {
      required uint64 timestamp = 1;
      required string author    = 2;
    }
    
    message MessageRequestResponse {
      required bool                      isApproved                = 1;
      optional bytes                     profileKey                = 2;
      optional DataMessage.LokiProfile   profile                   = 3;
    }
    
    message SharedConfigMessage {
      enum Kind {
        USER_PROFILE              = 1;
        CONTACTS                  = 2;
        CONVO_INFO_VOLATILE       = 3;
        USER_GROUPS               = 4;
       // CLOSED_GROUP_INFO       = 5;
       // CLOSED_GROUP_MEMBERS    = 6;
       // ENCRYPTION_KEYS         = 7;
      }
    
      required Kind              kind             = 1;
      required int64             seqno            = 2;
      required bytes             data             = 3;
    }
    
    message Content {
    
      enum ExpirationType {
        UNKNOWN             = 0;
        DELETE_AFTER_READ   = 1;
        DELETE_AFTER_SEND   = 2;
      }
    
      optional DataMessage                dataMessage                = 1;
      optional CallMessage                callMessage                = 3;
      optional ReceiptMessage             receiptMessage             = 5;
      optional TypingMessage              typingMessage              = 6;
      optional ConfigurationMessage       configurationMessage       = 7;
      optional DataExtractionNotification dataExtractionNotification = 8;
      optional Unsend                     unsendMessage              = 9;
      optional MessageRequestResponse     messageRequestResponse     = 10;
      optional SharedConfigMessage        sharedConfigMessage        = 11;
      optional ExpirationType             expirationType             = 12;
      optional uint32                     expirationTimer            = 13;
    }
    
    message KeyPair {
      // @required
      required bytes publicKey  = 1;
      // @required
      required bytes privateKey = 2;
    }
    
    message DataExtractionNotification {
    
      enum Type {
        SCREENSHOT  = 1; // no way to know this on Desktop
        MEDIA_SAVED = 2; // timestamp
      }
    
      // @required
      required Type   type      = 1;
      optional uint64 timestamp = 2;
    }
    
    // message GroupInviteMessage {
    //   required string         name              = 1;
    //   required bytes          memberPrivateKey  = 2;
    // }
    
    // this will replace our closedGroupControlMessage but we will need to keep both for some time
    // message GroupMessage {
      // optional GroupAdminMessage           adminMessage         = 31;
      // optional GroupMemberLeftMessage      memberLeftMessage    = 32;
      // optional GroupInviteMessage          inviteMessage        = 33;
      // optional GroupPromoteMessage         promoteMessage       = 34;
    // }
    
    // message GroupPromoteMessage {
      // required bytes          privateKey        = 1; // this is the group admins key
    // }
    
    // message GroupAdminMessage {
      // enum Type {
      //   DELETE_GROUP                   = 1; // members, groupSignature
      //   DELETE_GROUP_ALL_MEMBERS       = 2;  // groupSignature
      //   DELETE_MESSAGES_ALL_MEMBERS    = 3;  // groupSignature
      //   DELETE_ATTACHMENTS_ALL_MEMBERS = 4;  // groupSignature
      // }
    //
      // // @required
     //  required Type           type              = 1;
      // repeated bytes          members           = 2;
      // @required
     //  required bytes          groupSignature    = 3; // used by every members to make sure incoming admin action can be trusted
    // }
    
    // message GroupMemberLeftMessage {
     // the pubkey of the member who left is already in the senderIdentity
    // }
    
    
    message DataMessage {
    
      enum Flags {
        EXPIRATION_TIMER_UPDATE   = 2;
      }
    
      message Reaction {
        enum Action {
            REACT = 0;
            REMOVE = 1;
        }
        // @required
        required uint64 id        = 1; // Message timestamp
        // @required
        required string author    = 2;
        optional string emoji     = 3;
        // @required
        required Action action    = 4;
      }
    
      message Quote {
    
        message QuotedAttachment {
          optional string            contentType = 1;
          optional string            fileName    = 2;
          optional AttachmentPointer thumbnail   = 3;
        }
    
        // @required
        required uint64           id          = 1;
        // @required
        required string           author      = 2;
        optional string           text        = 3;
        repeated QuotedAttachment attachments = 4;
      }
    
      message Preview {
        // @required
        required string            url   = 1;
        optional string            title = 2;
        optional AttachmentPointer image = 3;
      }
    
      message LokiProfile {
        optional string displayName = 1;
        optional string profilePicture = 2;
      }
    
      message OpenGroupInvitation {
        // @required
        required string url = 1;
        // @required
        required string name = 3;
      }
    
      message ClosedGroupControlMessage {
    
    	  enum Type {
    	    NEW                           = 1;
          ENCRYPTION_KEY_PAIR           = 3;
          NAME_CHANGE                   = 4;
          MEMBERS_ADDED                 = 5;
          MEMBERS_REMOVED               = 6;
          MEMBER_LEFT                   = 7;
          ENCRYPTION_KEY_PAIR_REQUEST   = 8;
        }
    
    	  message KeyPairWrapper {
    	    // @required
    	    required bytes publicKey        = 1; // The public key of the user the key pair is meant for
    	    // @required
    	    required bytes encryptedKeyPair = 2; // The encrypted key pair
    	  }
    
    	  // @required
    	  required Type           type              = 1;
    	  optional bytes          publicKey         = 2;
    	  optional string         name              = 3;
    	  optional KeyPair        encryptionKeyPair = 4;
    	  repeated bytes          members           = 5;
    	  repeated bytes          admins            = 6;
    	  repeated KeyPairWrapper wrappers          = 7;
        optional uint32         expirationTimer   = 8;
    	}
    
    
      optional string                    body                      = 1;
      repeated AttachmentPointer         attachments               = 2;
      optional GroupContext              group                     = 3;
      optional uint32                    flags                     = 4;
      // TODO legacy messages support will be removed in a future release
      optional uint32                    expireTimer               = 5;
      optional bytes                     profileKey                = 6;
      optional uint64                    timestamp                 = 7;
      optional Quote                     quote                     = 8;
      repeated Preview                   preview                   = 10;
      optional Reaction                  reaction                  = 11;
      optional LokiProfile               profile                   = 101;
      optional OpenGroupInvitation       openGroupInvitation       = 102;
      optional ClosedGroupControlMessage closedGroupControlMessage = 104;
      optional string                    syncTarget                = 105;
      optional bool                      blocksCommunityMessageRequests  = 106;
      // optional GroupMessage              groupMessage              = 120;
    }
    
    message CallMessage {
    
      enum Type {
        PRE_OFFER          = 6;
        OFFER              = 1;
        ANSWER             = 2;
        PROVISIONAL_ANSWER = 3;
        ICE_CANDIDATES     = 4;
        END_CALL           = 5;
      }
    
      // @required
      required Type type              = 1;
      repeated string sdps            = 2;
      repeated uint32 sdpMLineIndexes = 3;
      repeated string sdpMids         = 4;
    
      // @required
      required string uuid            = 5;
    
    }
    
    message ConfigurationMessage {
    
      message ClosedGroup {
        optional bytes   publicKey         = 1;
        optional string  name              = 2;
        optional KeyPair encryptionKeyPair = 3;
        repeated bytes   members           = 4;
        repeated bytes   admins            = 5;
      }
    
      message Contact {
        // @required
        required bytes  publicKey         = 1;
        // @required
        required string name              = 2;
        optional string profilePicture    = 3;
        optional bytes  profileKey        = 4;
        optional bool   isApproved        = 5;
        optional bool   isBlocked         = 6;
        optional bool   didApproveMe      = 7;
      }
    
      repeated ClosedGroup closedGroups    = 1;
      repeated string      openGroups      = 2;
      optional string      displayName     = 3;
      optional string      profilePicture  = 4;
      optional bytes       profileKey      = 5;
      repeated Contact     contacts        = 6;
    }
    
    message ReceiptMessage {
    
      enum Type {
        READ     = 1;
      }
    
      // @required
      required Type   type      = 1;
      repeated uint64 timestamp = 2;
    }
    
    message AttachmentPointer {
    
      enum Flags {
        VOICE_MESSAGE = 1;
      }
    
      // @required
      required fixed64 id          = 1;
      optional string  contentType = 2;
      optional bytes   key         = 3;
      optional uint32  size        = 4;
      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  url         = 101;
    }
    
    message GroupContext {
    
      enum Type {
        UNKNOWN      = 0;
        UPDATE       = 1;
        DELIVER      = 2;
        QUIT         = 3;
        REQUEST_INFO = 4;
      }
    
      // @required
      optional bytes             id      = 1;
      // @required
      optional Type              type    = 2;
      optional string            name    = 3;
      repeated string            members = 4;
      optional AttachmentPointer avatar  = 5;
      repeated string            admins  = 6;
    }
    
    
    
    
    message WebSocketRequestMessage {
      optional string verb    = 1;
      optional string path    = 2;
      optional bytes  body    = 3;
      repeated string headers = 5;
      optional uint64 id      = 4;
    }
    
    
    message WebSocketMessage {
      enum Type {
          UNKNOWN  = 0;
          REQUEST  = 1;
          RESPONSE = 2;
      }
    
      optional Type                     type     = 1;
      optional WebSocketRequestMessage  request  = 2;
    }