// sync messages definitions
// /!\ ALL messages must have a "messageId" property
package sync;

syntax="proto3";

message Heartbeat {
  uint64 messageId = 1;
  string address = 2;
}

message NodeEvicted {
  uint64 messageId = 1;
  string nodeId = 2;
  string reason = 3;
  string evictor = 4;
}

message NodeShutdown {
  uint64 messageId = 1;
  string nodeId = 2;
}

message NodePreventEviction {
  uint64 messageId = 1;
  bool evictionPrevented = 2;
}

message NewRealtimeRoom {
  uint64 messageId = 1;
  string index = 2;
  string id = 3;

  // serialized JSON
  string filter = 4;
}

message RemoveRealtimeRoom {
  uint64 messageId = 1;
  string roomId = 2;
}

message Subscription {
  uint64 messageId = 1;
  string roomId = 2;
}

message Unsubscription {
  uint64 messageId = 1;
  string roomId = 2;
}

message DocumentNotification {
  uint64 messageId = 1;
  repeated string rooms = 2;
  uint32 status = 3;
  string requestId = 4;
  uint64 timestamp = 5;
  string index = 6;
  string collection = 7;
  string controller = 8;
  string action = 9;
  string protocol = 10;
  string scope = 11;

  // serialized JSON
  string volatile = 12;
  string result = 13;
}

message UserNotification {
  uint64 messageId = 1;
  string room = 2;
  uint32 status = 3;
  uint64 timestamp = 4;
  string index = 5;
  string collection = 6;
  string controller = 7;
  string action = 8;
  string protocol = 9;
  string user = 10;

  // serialized JSON
  string volatile = 11;
  string result = 12;
}

message NewAuthStrategy {
  message AuthStrategyConfig {
    string authenticator = 1;
    repeated string fields = 2;

    // serialized JSON
    string authenticateOptions = 3;
    string strategyOptions = 4;
  }

  message AuthStrategyMethods {
    string create = 1;
    string delete = 2;
    string exists = 3;
    string update = 4;
    string validate = 5;
    string verify = 6;
    optional string getById = 7;
    optional string getInfo = 8;
    optional string afterRegister = 9;
  }

  message AuthStrategy {
    AuthStrategyMethods methods = 1;
    AuthStrategyConfig config = 2;
  }

  uint64 messageId = 1;
  string strategyName = 2;
  string pluginName = 3;
  AuthStrategy strategy = 4;
}

message RemoveAuthStrategy {
  uint64 messageId = 1;
  string strategyName = 2;
  string pluginName = 3;
}

message DumpRequest {
  uint64 messageId = 1;
  string suffix = 2;
}

message ResetSecurity {
  uint64 messageId = 1;
}

message Shutdown {
  uint64 messageId = 1;
}

message RefreshValidators {
  uint64 messageId = 1;
}

message InvalidateProfile {
  uint64 messageId = 1;
  string profileId = 2;
}

message InvalidateRole {
  uint64 messageId = 1;
  string roleId = 2;
}

message AddIndex {
  uint64 messageId = 1;
  string scope = 2;
  string index = 3;
}

message AddCollection {
  uint64 messageId = 1;
  string scope = 2;
  string index = 3;
  string collection = 4;
}

message RemoveIndexes {
  uint64 messageId = 1;
  string scope = 2;
  repeated string indexes = 3;
}

message RemoveCollection {
  uint64 messageId = 1;
  string scope = 2;
  string index = 3;
  string collection = 4;
}

message ClusterWideEvent {
  uint64 messageId = 1;
  string event = 2;
  string payload = 3;
}

message RefreshIndexCache {
  uint64 messageId = 1;
}
