syntax = "proto2";
package copresence;
option optimize_for = LITE_RUNTIME;
import "enums.proto";
import "identity.proto";
message ClientVersion {
  optional string client = 1;
  optional string version_name = 2;
  optional int64 version_code = 3;
  optional string certificate_fingerprint = 4;
}
message Status {
  optional StatusCode code = 1;
  optional string message = 2;
}
message PushServiceRegistration {
  optional PushService service = 1;
}
message DeviceIdentifiers {
  optional int32 ulr_device_id = 1;
  optional DeviceIdentity device_identity = 2;
  optional Identity registrant = 3;
}
message Token {
  message Debug {
    repeated string email = 2;
  }
  optional string id = 1;
  optional TokenStatus status = 3;
  optional Debug debug = 4;
}
message DeviceFingerprint {
  optional string manufacturer = 1;
  optional string model = 2;
  optional PlatformType type = 3;
  optional string platform_version = 4;
}
message TokenTechnology {
  optional TokenMedium medium = 1;
  repeated TokenInstructionType instruction_type = 2;
}
message DeviceCapabilities {
  repeated TokenTechnology token_technology = 2;
}
message TokenInstruction {
  optional TokenInstructionType token_instruction_type = 1;
  optional TokenMedium medium = 2;
  optional string token_id = 4;
}
message Directive {
  optional InstructionType instruction_type = 1;
  optional TokenInstruction token_instruction = 2;
  optional int64 delay_millis = 3;
  optional int64 ttl_millis = 4;
  optional string published_message_id = 5;
  optional string subscription_id = 6;
}
message DeviceState {
  optional DeviceCapabilities capabilities = 1;
  repeated Directive active_directive = 2;
}
message DebugInfo {
  optional string served_by_task = 1;
  repeated string token_id = 3;
  optional int64 request_time_millis = 4;
}
message TokenObservation {
  optional string token_id = 1;
  repeated TokenSignals signals = 2;
}
message TokenSignals {
  optional TokenMedium medium = 1;
  optional int32 rssi = 2;
  optional int64 observed_time_millis = 3;
}
message AccessPolicy {
  optional int64 ttl_millis = 1;
  optional Acl acl = 2;
}
message Acl {
  optional AclType acl_type = 1;
  optional string named_acl_name = 2;
  optional bytes referenced_acl_consistency_token = 5;
}
message PublishedMessage {
  optional string id = 1;
  optional AccessPolicy access_policy = 2;
  optional Message message = 3;
  optional TokenExchangeStrategy token_exchange_strategy = 5;
  optional OptInStateFilter opt_in_state_filter = 6;
}
message TokenExchangeStrategy {
  optional AudioConfiguration audio_configuration = 1;
  optional BroadcastScanConfiguration broadcast_scan_configuration = 2;
}
message SubscribedMessage {
  message Debug {
    optional string published_message_id = 1;
    optional string publisher_identity_id = 2;
    optional string publisher_device_id = 3;
    optional int64 creation_timestamp_millis = 4;
    optional int64 ttl_millis = 5;
    optional TokenExchangeStrategy token_exchange_strategy = 7;
  }
  repeated string subscription_id = 1;
  optional Message published_message = 2;
  optional Debug debug = 3;
}
message Message {
  optional MessageType type = 2;
  optional bytes payload = 3;
}
message MessageType {
  optional string type = 2;
}
message Subscription {
  optional string id = 1;
  optional int64 ttl_millis = 3;
  optional MessageType message_type = 4;
  optional TokenExchangeStrategy token_exchange_strategy = 7;
  optional OptInStateFilter opt_in_state_filter = 8;
}
message MessageResult {
  optional string published_message_id = 1;
}
message SubscriptionResult {
  optional string subscription_id = 1;
}
message OptInStateFilter {
  repeated OptInState allowed_opt_in_state = 1;
}