pypush-plus-plus/icloud/cloudkit.proto
2023-10-21 19:40:39 -04:00

594 lines
No EOL
17 KiB
Protocol Buffer

syntax = "proto2";
// Based on https://gist.github.com/horrorho/9c0ff20055b854f4298750cfad635fe2
// and https://github.com/horrorho/InflatableDonkey/blob/master/src/main/resources/cloud_kit.proto
message RequestOperation {
message Header {
enum ContainerEnvironment {
PRODUCTION = 1;
SANDBOX = 2;
}
enum Database {
PRIVATE_DB = 1;
PUBLIC_DB = 2;
SHARED_DB = 3;
}
enum IsolationLevel {
ZONE = 1;
OPERATION = 2;
}
optional string userToken = 1;
optional string applicationContainer = 2;
optional string applicationBundle = 3;
optional string applicationVersion = 4;
optional uint64 applicationConfigVersion = 5;
optional uint64 globalConfigVersion = 6;
optional Identifier deviceIdentifier = 7;
optional string deviceSoftwareVersion = 8;
optional string deviceHardwareVersion = 9;
optional string deviceLibraryName = 10;
optional string deviceLibraryVersion = 11;
optional string deviceFlowControlKey = 12;
optional uint64 deviceFlowControlBudget = 13;
optional uint64 deviceFlowControlBudgetCap = 14;
optional float deviceFlowControlRegeneration = 15;
optional uint64 deviceProtocolVersion = 16;
optional Locale locale = 17;
optional string mmcsProtocolVersion = 18;
optional ContainerEnvironment applicationContainerEnvironment = 19;
optional bytes clientChangeToken = 20;
optional string deviceAssignedName = 21;
optional string deviceHardwareID = 22;
optional Database targetDatabase = 23;
optional string userIDContainerID = 24;
optional IsolationLevel isolationLevel = 25;
optional int32 unk1 = 29;
optional string unk2 = 32; // UUID
optional string deviceSerial = 33;
optional int32 unk3 = 34;
optional int32 unk4 = 35;
}
optional Header header = 1;
optional Operation request = 2;
optional ZoneRetrieveRequest zoneRetrieveRequest = 201;
optional RecordSaveRequest recordSaveRequest = 210;
optional RecordRetrieveRequest recordRetrieveRequest = 211;
optional QueryRetrieveRequest queryRetrieveRequest = 220;
}
message RecordSaveRequest {
optional Record record = 1;
optional int32 unk1 = 2; // 1
optional int32 unk2 = 6; // 2
}
message ResponseOperation {
message Result {
message Error {
message Client {
enum Code {
UNKNOWN = 1;
EXPIRED_APP_CONFIG = 2;
EXPIRED_GLOBAL_CONFIG = 3;
BAD_SYNTAX = 4;
FORBIDDEN = 5;
THROTTLED = 6;
REFUSED = 7;
NOT_SUPPORTED = 8;
EXISTS = 9;
REQUEST_ALREADY_PROCESSED = 10;
BAD_AUTH_TOKEN = 11;
NEEDS_AUTHENTICATION = 12;
MESCAL_SIGNATURE_MISSING = 13;
INVALID_MESCAL_SIGNATURE = 14;
OP_LOCK_FAILURE = 15;
ATOMIC_FAILURE = 16;
RESET_NEEDED = 17;
FIELDS_PER_TYPE_LIMIT_EXCEEDED = 18;
TYPE_BUSY = 19;
NUM_RECORD_TYPES_LIMIT_EXCEEDED = 20;
INVALID_CONTAINER = 21;
INVALID_RECORD_TYPE_NAME = 22;
INVALID_FIELD_NAME = 23;
INVALID_FIELD_VALUE = 24;
INVALID_IDENTIFIER = 25;
FIELD_NOT_QUERYABLE = 26;
FIELD_NOT_SORTABLE = 27;
QUERY_FILTER_LIMIT_EXCEEDED = 28;
QUERY_FILTER_VALUES_LIMIT_EXCEEDED = 29;
MEMBERSHIP_QUERY_LIMIT_EXCEEDED = 30;
NOTIFICATION_ADDITIONAL_FIELD_LIMIT_EXCEEDED = 31;
NOTIFICATION_ADDITIONAL_FIELD_INVALID_TYPE = 32;
SUBSCRIPTION_LIMIT_EXCEEDED = 33;
UNIQUE_TRIGGER_LIMIT_EXCEEDED = 34;
TRIGGER_SUBSCRIPTION_BINDING_TYPE_MISMATCH = 35;
ZONE_SIZE_LIMIT_EXCEEDED = 36;
ZONE_COUNT_LIMIT_EXCEEDED = 37;
UNIQUE_FIELD_FAILURE = 38;
VALIDATING_REFERENCE_ERROR = 39;
FULL_RESET_NEEDED = 40;
ALREADY_SHARED = 41;
EMAIL_OUT_OF_NETWORK = 42;
DUPLICATE_SUBSCRIPTION = 43;
EXPIRED_PUT_RECEIPT = 46;
QUOTA_EXCEEDED = 47;
ZONE_NOT_FOUND = 48;
INVALID_BUNDLE_ID = 49;
UNSUPPORTED_DEVICE = 50;
BLACK_LISTED = 51;
RECORD_PROTECTION_INFO_TAG_MISMATCH = 52;
ZONE_PROTECTION_INFO_TAG_MISMATCH = 53;
ASSET_SIZE_LIMIT_EXCEEDED = 54;
BATCH_OPERATION_LIMIT_EXCEEDED = 55;
REQUEST_SIZE_LIMIT_EXCEEDED = 56;
RECORD_SIZE_LIMIT_EXCEEDED = 57;
DATABASE_COMMIT_SIZE_EXCEEDED = 58;
USER_DELETED_DATA_FOR_ZONE = 59;
STALE_RECORD_UPDATE = 60;
SHARE_PARTICIPANT_LIMIT_EXCEEDED = 61;
SHARE_PARTICIPANT_ERROR = 62;
}
optional Code type = 1;
}
message Server {
enum Code {
UNKNOWN = 1;
OVERLOADED = 2;
NOT_FOUND = 3;
CONTAINER_UNAVAILABLE = 4;
MESCAL_SIGNATURE_PARSE_ERROR = 6;
ZONE_BUSY = 7;
ZONE_UNAVAILABLE = 8;
}
optional Code type = 1;
}
message Extension {
optional string extensionName = 1;
optional uint32 typeCode = 2;
optional bytes extensionPayload = 3;
}
optional Client clientError = 1;
optional Server serverError = 2;
optional Extension extensionError = 7;
optional int32 retryAfterSeconds = 3;
optional string errorDescription = 4;
optional string errorKey = 5;
optional string errorInternal = 6;
}
enum Code {
SUCCESS = 1;
PARTIAL = 2;
FAILURE = 3;
INDETERMINATE = 4;
}
optional Code code = 1;
optional Error error = 2;
}
optional uint32 operationCost = 1;
optional Operation response = 2;
optional Result result = 3;
optional ZoneRetrieveResponse zoneRetrieveResponse = 201;
optional RecordRetrieveResponse recordRetrieveResponse = 211;
optional QueryRetrieveResponse queryRetrieveResponse = 220;
}
message Operation {
enum Type {
NONE_TYPE = 0;
ZONE_SAVE_TYPE = 200;
ZONE_RETRIEVE_TYPE = 201;
ZONE_DELETE_TYPE = 202;
ZONE_RETRIEVE_CHANGES_TYPE = 203;
RECORD_SAVE_TYPE = 210;
RECORD_RETRIEVE_TYPE = 211;
RECORD_RETRIEVE_VERSIONS_TYPE = 212;
RECORD_RETRIEVE_CHANGES_TYPE = 213;
RECORD_DELETE_TYPE = 214;
QUERY_RETRIEVE_TYPE = 220;
ASSET_UPLOAD_TOKEN_RETRIEVE_TYPE = 230;
CONTAINER_DELETE_TYPE = 240;
CONTAINER_RESET_TYPE = 241;
CONTAINER_SCHEMA_PROMOTION_TYPE = 242;
USER_AVAILABLE_QUOTA_TYPE = 243;
WEB_AUTH_TOKEN_RETRIEVE_TYPE = 250;
SUBSCRIPTION_CREATE_TYPE = 300;
SUBSCRIPTION_RETRIEVE_TYPE = 301;
SUBSCRIPTION_DELETE_TYPE = 302;
USER_RETRIEVE_TYPE = 400;
USER_QUERYTYPE = 401;
USER_PRIVACY_SETTINGS_RETRIEVE_TYPE = 402;
USER_PRIVACY_SETTINGS_UPDATE_TYPE = 403;
USER_PRIVACY_SETTINGS_RESET_TYPE = 404;
USER_PRIVACY_SETTINGS_BATCH_LOOKUP = 405;
SHARE_SAVE_TYPE = 500;
SHARE_RETRIEVE_TYPE = 501;
SHARE_DELETE_TYPE = 502;
SHARE_ACCEPT_TYPE = 503;
SHARE_TOKEN_SAVE_TYPE = 510;
SHARE_TOKEN_RETRIEVE_TYPE = 511;
SHARE_TOKEN_DELETE_TYPE = 512;
POST_COMMENT_TYPE = 600;
GET_COMMENTS_TYPE = 601;
GET_COMMENT_TYPE = 613;
DELETE_COMMENT_TYPE = 602;
LIKE_TYPE = 610;
UNLIKE_TYPE = 611;
GET_LIKES_TYPE = 612;
PULSE_TYPE = 700;
PUSH_REGISTER_TYPE = 800;
PUSH_UNREGISTER_TYPE = 801;
PUSH_BADGE_TYPE = 802;
PUSH_SYNC_TYPE = 803;
PUSH_READ_TYPE = 804;
MESCAL_SIGNATURE_TYPE = 1000;
MESCAL_SESSION_INFO_TYPE = 1001;
MESCAL_CERTIFICATE_TYPE = 1002;
}
optional string operationUUID = 1;
optional Type type = 2;
optional bool synchronousMode = 3;
optional bool last = 4;
}
// /api/client/zone/retrieve
message ZoneRetrieveRequest {
optional RecordZoneIdentifier zoneIdentifier = 1;
}
message ZoneRetrieveResponse {
message ZoneSummary {
optional Zone targetZone = 1;
optional bytes currentServerContinuationToken = 2;
optional bytes clientChangeToken = 3;
optional int32 deviceCount = 4;
optional int64 assetQuotaUsage = 5;
optional int64 metadataQuotaUsage = 6;
}
repeated ZoneSummary zoneSummary = 1;
}
// /api/client/record/retrieve
message RecordRetrieveRequest {
message RetrieveAssetURL {
enum Type {
PUBLISHED_URL = 1;
STREAMING_URL = 2;
}
optional RequestedFields assetFields = 1;
optional int64 requestedTTL = 2;
optional Type type = 3;
}
optional RecordIdentifier recordIdentifier = 1;
optional RequestedFields requestedFields = 2;
optional string versionETag = 3;
optional string clientVersionETag = 4;
optional RetrieveAssetURL getAssetURL = 5;
optional AssetsToDownload assetsToDownload = 6;
}
message RecordRetrieveResponse {
optional Record record = 1;
optional bool clientVersionETagMatch = 2;
}
// /api/client/query/retrieve
message QueryRetrieveRequest {
optional Query query = 1;
optional bytes continuationMarker = 2;
optional uint32 limit = 3;
optional RecordZoneIdentifier zoneIdentifier = 4;
optional RequestedFields requestedFields = 5;
optional AssetsToDownload assetsToDownload = 6;
}
message QueryRetrieveResponse {
message QueryResult {
enum Type {
ID_AND_ETAG = 1;
FULL_RECORD = 2;
}
optional RecordIdentifier identifier = 1;
optional string etag = 2;
optional Type type = 3;
optional Record record = 4;
}
repeated QueryResult queryResults = 1;
optional bytes continuationMarker = 2;
}
message Query {
message Filter {
enum Type {
EQUALS = 1;
NOT_EQUALS = 2;
IN = 3;
NOT_IN = 4;
LESS_THAN = 5;
LESS_THAN_OR_EQUALS = 6;
GREATER_THAN = 7;
GREATER_THAN_OR_EQUALS = 8;
NEAR = 9;
CONTAINS_ALL_TOKENS = 10;
CONTAINS_ANY_TOKENS = 11;
LIST_CONTAINS = 12;
LIST_NOT_CONTAINS = 13;
LIST_CONTAINS_ANY = 14;
LIST_NOT_CONTAINS_ANY = 15;
BEGINS_WITH = 16;
NOT_BEGINS_WITH = 17;
LIST_MEMBER_BEGINS_WITH = 18;
NOT_LIST_MEMBER_BEGINS_WITH = 19;
LIST_CONTAINS_ALL = 20;
LIST_NOT_CONTAINS_ALL = 21;
UNKNOWN = 22;
}
optional Record.Field.Identifier fieldName = 1;
optional Record.Field.Value fieldValue = 2;
optional Location.Bound bounds = 3;
optional Type type = 4;
}
message Sort {
enum Order {
ASCENDING = 1;
DESCENDING = 2;
UNKNOWN = 3;
}
optional Record.Field.Identifier fieldName= 1;
optional Order order = 2;
optional Location.Coordinate coordinate = 3;
}
enum QueryOperator {
AND = 1;
OR = 2;
}
repeated Record.Type types = 1;
repeated Filter filters = 2;
repeated Sort sorts = 3;
optional bool distinct = 4;
optional QueryOperator queryOperator = 5;
}
message Date {
optional double time = 1;
}
message Asset {
optional string owner = 1;
optional bytes signature = 2;
optional bytes header = 3;
optional uint64 size = 4;
optional string downloadToken = 5;
optional bytes downloadRequest = 6;
optional string derivedContentType = 7;
optional string contentBaseURL = 8;
optional string requestor = 9;
optional RecordIdentifier recordID = 10;
optional string uploadReceipt = 11;
optional bytes data = 12;
optional string downloadBaseURL = 13;
optional uint64 downloadURLExpiration = 14;
optional ProtectionInfo protectionInfo = 15;
optional bytes referenceSignature = 17;
optional uint64 downloadTokenExpiration = 18;
}
message DateStatistics {
optional Date creation = 1;
optional Date modification = 2;
}
message Location {
message Bound {
optional double radius = 1;
}
message Coordinate {
optional double lattitude = 1;
optional double longitude = 2;
optional double horizontalAccuracy = 3;
optional double altitude = 4;
optional double verticalAccuracy = 5;
optional double course = 6;
optional double speed = 7;
optional Date timestamp = 8;
}
optional Coordinate coordinate = 1;
optional Bound bounds = 2;
}
message Package {
optional Asset manifest = 1;
repeated Asset sections = 2;
}
message Record {
message Field {
message Identifier {
optional string name = 1;
}
message Value {
enum Type {
BYTES_TYPE = 1;
DATE_TYPE = 2;
STRING_TYPE = 3;
LOCATION_TYPE = 4;
REFERENCE_TYPE =5;
ASSET_TYPE = 6;
INT64_TYPE = 7;
DOUBLE_TYPE = 8;
EMPTY_LIST = 9;
DATE_LIST_TYPE = 10;
BYTES_LIST_TYPE = 11;
LOCATION_LIST_TYPE = 12;
REFERENCE_LIST_TYPE = 13;
ASSET_LIST_TYPE = 14;
STRING_LIST_TYPE = 15;
LIST_TYPE = 16;
INT64_LIST_TYPE = 17;
DOUBLE_LIST_TYPE = 18;
PACKAGE_TYPE = 19;
ENCRYPTED_BYTES_TYPE = 20;
ENCRYPTED_BYTES_LIST_TYPE = 21;
UNKNOWN = 22;
}
optional Type type = 1;
optional bytes bytesValue = 2;
optional int64 signedValue = 4;
optional double doubleValue = 5;
optional Date dateValue = 6;
optional string stringValue = 7;
optional Location.Coordinate locationValue = 8;
optional Reference referenceValue = 9;
optional Asset assetValue = 10;
repeated Value listValues = 11;
optional Package packageValue = 12;
}
optional Identifier identifier = 1;
optional Value value = 2;
}
message Reference {
enum Type {
OWNING = 1;
WEAK = 2;
VALIDATING = 3;
}
optional Type type = 1;
optional RecordIdentifier recordIdentifier = 2;
}
message Type {
optional string name = 1;
}
optional string etag= 1;
optional RecordIdentifier recordIdentifier = 2;
optional Record.Type type = 3;
optional Identifier createdBy = 4;
optional DateStatistics timeStatistics = 5;
repeated Record.Field recordField = 7;
optional ShareIdentifier shareId = 8;;
optional Identifier modifiedBy = 9;
repeated string conflictLoserEtag = 10;
optional string modifiedByDevice = 11;
repeated Record.Field pluginFields = 12;
optional ProtectionInfo protectionInfo = 13;
optional uint32 permission = 15;
}
message RequestedFields {
repeated Record.Field.Identifier fields = 1;
}
message AssetsToDownload {
optional bool allAssets = 1;
optional RequestedFields assetFields = 2;
}
message Locale {
optional string languageCode = 1;
optional string regionCode = 2;
repeated string enabledKeyboards = 3;
optional string activeKeyboard = 4;
}
message ShareIdentifier {
optional Identifier value = 1;
optional RecordZoneIdentifier zoneIdentifier = 2;
}
message RecordIdentifier {
optional Identifier value = 1;
optional RecordZoneIdentifier zoneIdentifier = 2;
}
message RecordZoneIdentifier {
optional Identifier value = 1;
optional Identifier ownerIdentifier = 2;
}
message Identifier {
enum Type {
RECORD = 1;
DEVICE = 2;
SUBSCRIPTION = 3;
SHARE = 4;
COMMENT = 5;
RECORD_ZONE = 6;
USER = 7;
}
optional string name = 1;
optional Type type = 2;
}
message ProtectionInfo {
optional bytes protectionInfo = 1;
optional string protectionInfoTag = 2;
}
message Zone {
optional RecordZoneIdentifier zoneIdentifier = 1;
optional string etag= 2;
optional ProtectionInfo protectionInfo = 3;
optional ProtectionInfo recordProtectionInfo = 6;
}
message FileTokens {
repeated FileToken fileTokens = 1;
}
message FileToken {
optional bytes signature = 1;
optional string downloadToken = 2;
optional uint64 size = 3;
optional bytes referenceSignature = 4;
}
message EncryptedAttributes {
optional string relativePath = 1;
optional string domain = 2;
optional uint64 birth = 3;
optional uint64 modified = 4;
optional uint64 statusChanged = 5;
optional uint64 size = 6;
optional uint32 groupID = 7;
optional uint32 userID = 8;
optional uint32 mode = 9;
optional uint64 sizeBeforeCopy = 10;
optional bytes linkTarget = 11;
optional bytes encryptionKey = 12;
optional bytes sha256Signature = 13;
optional int32 domainOrdinal = 14;
optional int32 flags = 15;
optional int32 contentEncodingMethod = 16;
optional int32 contentCompressionMethod = 17;
}