syntax = "proto3";

option go_package = "github.com/lbryio/herald.go/protobuf/go/pb";
import "result.proto";

package pb;

service Hub {
  rpc Search(SearchRequest) returns (Outputs) {}
  rpc Ping(EmptyMessage) returns (StringValue) {}
  rpc Hello(HelloMessage) returns (HelloMessage) {}
  rpc AddPeer(ServerMessage) returns (StringValue) {}
  rpc PeerSubscribe(ServerMessage) returns (StringValue) {}
  rpc Version(EmptyMessage) returns (StringValue) {}
  rpc Features(EmptyMessage) returns (StringValue) {}
  rpc Broadcast(EmptyMessage) returns (UInt32Value) {}
  rpc Height(EmptyMessage) returns (UInt32Value) {}
  rpc HeightSubscribe(UInt32Value) returns (stream UInt32Value) {}
  rpc Resolve(StringArray) returns (Outputs) {}
}

message EmptyMessage {}

message ServerMessage {
  string address = 1;
  string port = 2;
}

message HelloMessage {
  string port = 1;
  string host = 2;
  repeated ServerMessage servers = 3;
}

message InvertibleField {
  bool invert = 1;
  repeated string value = 2;
}

message StringValue {
  string value = 1;
}

message StringArray {
  repeated string value = 1;
}

message BoolValue {
  bool value = 1;
}

message UInt32Value {
  uint32 value = 1;
}

message RangeField {
  enum Op {
    EQ = 0;
    LTE = 1;
    GTE = 2;
    LT = 3;
    GT = 4;
  }
  Op op = 1;
  repeated int32 value = 2;
}

message SearchRequest {
  InvertibleField claim_id = 1;
  InvertibleField channel_id = 2;
  string text = 3;
  int32 limit = 4;
  repeated string order_by = 5;
  uint32 offset = 6;
  bool is_controlling = 7;
  string last_take_over_height = 8;
  string claim_name = 9;
  string normalized_name = 10;
  repeated RangeField tx_position = 11;
  repeated RangeField amount = 12;
  repeated RangeField timestamp = 13;
  repeated RangeField creation_timestamp = 14;
  repeated RangeField height = 15;
  repeated RangeField creation_height = 16;
  repeated RangeField activation_height = 17;
  repeated RangeField expiration_height = 18;
  repeated RangeField release_time = 19;
  string short_url = 20;
  string canonical_url = 21;
  string title = 22;
  string author = 23;
  string description = 24;
  repeated string claim_type = 25;
  repeated RangeField repost_count = 26;
  repeated string stream_type = 27;
  repeated string media_type = 28;
  repeated RangeField fee_amount = 29;
  string fee_currency = 30;
  repeated RangeField duration = 31;
  string reposted_claim_id = 32;
  repeated RangeField censor_type = 33;
  string claims_in_channel = 34;
  BoolValue is_signature_valid = 36;
  repeated RangeField effective_amount = 37;
  repeated RangeField support_amount = 38;
  repeated RangeField trending_score = 39;
  string tx_id = 43;
  UInt32Value tx_nout = 44;
  string signature = 45;
  string signature_digest = 46;
  string public_key_bytes = 47;
  string public_key_id = 48;
  repeated string any_tags = 49;
  repeated string all_tags = 50;
  repeated string not_tags = 51;
  bool has_channel_signature = 52;
  BoolValue has_source = 53;
  int32 limit_claims_per_channel = 54;
  repeated string any_languages = 55;
  repeated string all_languages = 56;
  bool remove_duplicates = 57;
  bool no_totals = 58;
  string sd_hash = 59;
}
