Skip to content

Instantly share code, notes, and snippets.

@biemster
Created May 22, 2024 17:18
Show Gist options
  • Save biemster/60df00e5032deffb85c8beea7e6eea99 to your computer and use it in GitHub Desktop.
Save biemster/60df00e5032deffb85c8beea7e6eea99 to your computer and use it in GitHub Desktop.
FaceTime protobuf from facetime2/.../main.js
syntax = "proto2";
message InnerMessage {
optional bytes message = 1;
optional uint32 counter = 2;
optional bytes ktGossipData = 3;
optional bytes debugInfo = 99;
}
message OuterMessage {
optional bytes encryptedPayload = 1;
optional bytes ephemeralPubKey = 2;
optional bytes signature = 3;
optional bytes keyValidator = 99;
}
message ConversationMessage {
optional uint32 version = 1;
optional int32 type = 2;
optional bool shouldSuppressInCallUI = 3;
repeated ConversationParticipant activeParticipants = 4;
optional string conversationGroupUUIDString = 5;
repeated ConversationMember addedMembers = 6;
optional uint32 disconnectedReason = 7;
optional string protoUpgradeSessionUUID = 8;
repeated ConversationActivitySession activitySessions = 9;
optional string nickname = 10;
optional ConversationLink link = 11;
optional ConversationReport reportData = 12;
optional bool isLetMeInApproved = 13;
optional EncryptedConversationMessage encryptedMessage = 14;
optional string letMeInDelegationHandle = 15;
optional string letMeInDelegationUUID = 16;
optional int32 enclosedEncryptedType = 17;
repeated ConversationInvitationPreference invitationPreferences = 19;
repeated ConversationMember removedMembers = 20;
optional bytes unicastConnectorBlob = 21;
repeated ConversationMember lightweightMembers = 22;
repeated ConversationParticipant activeLightweightParticipants = 23;
optional bool guestModeEnabled = 24;
optional string highlightIdentifier = 25;
}
message ConversationParticipant {
optional uint32 version = 1;
optional uint64 identifier = 2;
optional Handle handle = 3;
optional bytes avcData = 4;
optional bool isMomentsAvailable = 5;
optional bool isScreenSharingAvailable = 6;
optional bool isGondolaCallingAvailable = 7;
optional bool isMirageAvailable = 8;
optional bool isLightweight = 9;
optional uint32 sharePlayProtocolVersion = 10;
optional uint32 options = 11;
optional bool isGFTDowngradeToOneToOneAvailable = 12;
optional bool guestModeEnabled = 13;
optional ConversationParticipantAssociation association = 14;
optional bool isUPlusNDowngradeAvailable = 15;
}
message Handle {
optional int32 type = 1;
optional string value = 2;
optional string normalizedValue = 3;
optional string isoCountryCode = 4;
}
message ConversationParticipantAssociation {
optional uint32 version = 1;
optional uint64 identifier = 2;
optional string avcIdentifier = 3;
}
message ConversationMember {
optional uint32 version = 1;
optional Handle handle = 2;
optional string nickname = 3;
optional Handle lightweightPrimary = 4;
optional uint64 lightweightPrimaryParticipantID = 5;
optional int32 validationSource = 6;
}
message ConversationActivitySession {
optional string identifierUUIDString = 1;
optional ConversationActivity activity = 2;
optional double creationDateEpochTime = 3;
}
message ConversationActivity {
optional string identifierUUIDString = 1;
optional bytes applicationContext = 2;
optional string bundleIdentifier = 3;
optional string activityIdentifier = 4;
optional bytes metadata = 5;
optional ConversationActivityContext activityContext = 7;
optional Handle originatorHandle = 8;
optional double updatedDateEpochTime = 9;
optional string fallbackApplicationName = 10;
optional ConversationActivityMetadata activityMetadata = 11;
optional bool isSystemActivity = 12;
}
message ConversationActivityContext {
optional string contextIdentifier = 1;
optional string actionDescription = 2;
optional string ongoingDescription = 3;
optional string completedDescription = 4;
}
message ConversationActivityMetadata {
optional string fallbackURL = 1;
optional bool supportsContinuationOnTV = 2;
optional string title = 3;
optional string subtitle = 4;
optional bytes image = 5;
optional uint32 preferredBroadcastingAttributes = 6;
}
message ConversationLink {
optional string pseudonym = 1;
optional bytes publicKey = 2;
optional bytes privateKey = 3;
repeated Handle invitedHandles = 4;
optional double creationDateEpochTime = 5;
optional string groupUUIDString = 6;
optional Handle originatorHandle = 7;
optional double pseudonymExpirationDateEpochTime = 8;
optional bool isActivated = 9;
optional ConversationLinkGeneratorDescriptor generatorDescriptor = 10;
optional string linkName = 11;
optional int32 linkLifetimeScope = 12;
}
message ConversationLinkGeneratorDescriptor {
optional string generatorID = 1;
optional uint32 generatorVersion = 2;
}
message ConversationReport {
optional string conversationID = 1;
optional double timebase = 2;
}
message EncryptedConversationMessage {
optional bytes publicKey = 1;
optional bytes conversationMessageBytes = 2;
}
message ConversationInvitationPreference {
optional uint32 version = 1;
optional int32 handleType = 2;
optional uint32 notificationStyles = 3;
}
message ConversationParticipantDidJoinContext {
optional uint32 version = 1;
repeated ConversationMember members = 2;
optional ConversationMessage message = 3;
optional string messagesGroupUUIDString = 4;
optional string messagesGroupName = 5;
optional bool isMomentsAvailable = 6;
optional ConversationActivitySession activitySession = 7;
optional bool video = 8;
optional bool isScreenSharingAvailable = 9;
optional string providerIdentifier = 10;
repeated Handle otherInvitedHandles = 11;
optional bool isMirageAvailable = 12;
repeated ConversationMember lightweightMembers = 13;
optional bool isLightweight = 14;
optional bool isGondolaCallingAvailable = 15;
optional bool videoEnabled = 16;
optional uint32 sharePlayProtocolVersion = 17;
optional bool isGFTDowngradeToOneToOneAvailable = 18;
optional ConversationParticipantAssociation participantAssociation = 19;
optional bool isUPlusNDowngradeAvailable = 20;
optional uint32 avMode = 21;
}
message VCMediaNegotiationBlobV2 {
optional VCMediaNegotiationBlobV2GeneralInfo generalInfo = 1;
optional VCMediaNegotiationBlobV2BandwidthSettings bandwidthSettings = 2;
optional VCMediaNegotiationBlobV2CodecFeatures codecSupport = 3;
optional VCMediaNegotiationBlobV2MicrophoneSettingsU1 microphoneU1 = 4;
optional VCMediaNegotiationBlobV2CameraSettingsU1 cameraU1 = 5;
optional VCMediaNegotiationBlobV2MomentsSettings momentsSettings = 6;
repeated VCMediaNegotiationBlobV2StreamGroup streamGroups = 7;
}
message VCMediaNegotiationBlobV2GeneralInfo {
optional uint64 ntpTime = 1;
optional string cname = 2;
optional uint32 abSwitches = 3;
optional uint32 screenRes = 4;
}
message VCMediaNegotiationBlobV2BandwidthSettings {
optional uint32 cap2G = 1;
optional uint32 cap3G = 2;
optional uint32 capLTE = 3;
optional uint32 cap5G = 4;
optional uint32 capWifi = 5;
}
message VCMediaNegotiationBlobV2CodecFeatures {
optional uint32 audioFeatures = 1;
optional bytes videoFeatures = 2;
}
message VCMediaNegotiationBlobV2MicrophoneSettingsU1 {
optional uint32 rtpSSRC = 1;
optional uint32 payloads = 2;
}
message VCMediaNegotiationBlobV2CameraSettingsU1 {
optional uint32 rtpSSRC = 1;
repeated VCMediaNegotiationBlobV2VideoPayload payloads = 2;
optional uint32 orientMismatchDisplayRatio = 3;
}
message VCMediaNegotiationBlobV2VideoPayload {
optional uint32 videoPayload = 1;
optional uint32 parameterSet = 2;
optional uint32 encodeFormats = 3;
optional uint32 decodeFormats = 4;
}
message VCMediaNegotiationBlobV2MomentsSettings {
optional uint32 capabilities = 1;
optional uint32 supportedCodecs = 2;
}
message VCMediaNegotiationBlobV2StreamGroup {
optional uint32 metadata = 1;
optional uint32 payloadSpecOrPayloads = 2;
optional uint32 qualityIndex = 3;
optional uint32 rtpSSRC = 4;
optional uint32 streamID = 5;
optional uint32 maxNetworkBitrate = 6;
optional uint32 repairedMaxNetworkBitrate = 7;
optional uint32 audioChannelCount = 8;
optional uint32 streamIndex = 9;
}
message VCCallInfoBlob {
optional uint32 callID = 1;
optional uint32 clientVersion = 2;
optional string deviceType = 3;
optional string frameworkVersion = 4;
optional string osVersion = 5;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment