syntax = "proto2";
package copresence;
option optimize_for = LITE_RUNTIME;
import "codes.proto";
import "enums.proto";
import "data.proto";
message RequestHeader {
  optional ClientVersion client_version = 4;
  optional ClientVersion framework_version = 5;
  optional int64 current_time_millis = 6;
  optional string registered_device_id = 7;
  repeated string experiment_override = 8;
  optional DeviceFingerprint device_fingerprint = 10;
  optional string configuration_etag = 11;
}
message ResponseHeader {
  optional DebugInfo debug_info = 2;
  optional Status status = 3;
}
message RegisterDeviceRequest {
  optional RequestHeader header = 1;
  optional PushServiceRegistration push_service = 5;
  optional DeviceIdentifiers device_identifiers = 6;
}
message RegisterDeviceResponse {
  optional ResponseHeader header = 1;
  optional string registered_device_id = 2;
}
message ReportRequest {
  optional RequestHeader header = 1;
  optional ManageMessagesRequest manage_messages_request = 2;
  optional ManageSubscriptionsRequest manage_subscriptions_request = 3;
  optional UpdateSignalsRequest update_signals_request = 4;
}
message UpdateSignalsRequest {
  repeated TokenObservation token_observation = 1;
  optional DeviceState state = 3;
}
message ManageMessagesRequest {
  repeated PublishedMessage message_to_publish = 1;
  repeated string id_to_unpublish = 2;
}
message ManageSubscriptionsRequest {
  repeated Subscription subscription = 1;
  repeated string id_to_unsubscribe = 2;
}
message ReportResponse {
  optional ResponseHeader header = 1;
  optional ManageMessagesResponse manage_messages_response = 2;
  optional ManageSubscriptionsResponse manage_subscriptions_response = 3;
  optional UpdateSignalsResponse update_signals_response = 4;
}
message UpdateSignalsResponse {
  optional util.error.Code status = 1;
  repeated Token token = 2;
  repeated SubscribedMessage message = 3;
  repeated Directive directive = 4;
}
message ManageMessagesResponse {
  optional util.error.Code status = 1;
  repeated MessageResult published_message_result = 3;
}
message ManageSubscriptionsResponse {
  optional util.error.Code status = 1;
  repeated SubscriptionResult subscription_result = 3;
}