syntax = "proto3";

package appsender;

import "google/protobuf/empty.proto";

option go_package = "github.com/ava-labs/avalanchego/proto/pb/appsender";

service AppSender {
  rpc SendAppRequest(SendAppRequestMsg) returns (google.protobuf.Empty);
  rpc SendAppResponse(SendAppResponseMsg) returns (google.protobuf.Empty);
  rpc SendAppGossip(SendAppGossipMsg) returns (google.protobuf.Empty);
  rpc SendAppGossipSpecific(SendAppGossipSpecificMsg) returns (google.protobuf.Empty);

  rpc SendCrossChainAppRequest(SendCrossChainAppRequestMsg) returns (google.protobuf.Empty);
  rpc SendCrossChainAppResponse(SendCrossChainAppResponseMsg) returns (google.protobuf.Empty);
}

message SendAppRequestMsg {
  // The nodes to send this request to
  repeated bytes node_ids = 1;
  // The ID of this request
  uint32 request_id = 2;
  // The request body
  bytes request = 3;
}

message SendAppResponseMsg {
  // The node to send a response to
  bytes node_id = 1;
  // ID of this request
  uint32 request_id = 2;
  // The response body
  bytes response = 3;
}

message SendAppGossipMsg {
  // The message body
  bytes msg = 1;
}

message SendAppGossipSpecificMsg {
  // The nodes to send this request to
  repeated bytes node_ids = 1;
  // The message body
  bytes msg = 2;
}

message SendCrossChainAppRequestMsg {
  // The chain to send this request to
  bytes chain_id = 1;
  // the ID of this request
  uint32 request_id = 2;
  // The request body
  bytes request = 3;
}

message SendCrossChainAppResponseMsg {
  // The chain to send this response to
  bytes chain_id = 1;
  // the ID of this request
  uint32 request_id = 2;
  // The response body
  bytes response = 3;
}
