// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

// Package serverdiscovery provides a service on Consul servers to discover the set of servers
// currently able to handle incoming requests.

syntax = "proto3";

package hashicorp.consul.serverdiscovery;

import "annotations/ratelimit/ratelimit.proto";

service ServerDiscoveryService {
  // WatchServers will stream back sets of ready servers as they change such as
  // when new servers are added or older ones removed. A ready server is one that
  // should be considered ready for sending general RPC requests towards that would
  // catalog queries, xDS proxy configurations and similar services.
  rpc WatchServers(WatchServersRequest) returns (stream WatchServersResponse) {
    option (hashicorp.consul.internal.ratelimit.spec) = {
      operation_type: OPERATION_TYPE_READ,
      operation_category: OPERATION_CATEGORY_SERVER_DISCOVERY
    };
  }
}

message WatchServersRequest {
  // Wan being set to true will cause WAN addresses to be sent in the response
  // instead of the LAN addresses which are the default
  bool wan = 1;
}

message WatchServersResponse {
  // Servers is the list of server address information.
  repeated Server servers = 1;
}

message Server {
  // id is the unique string identifying this server for all time.
  string id = 1;
  // address on the network of the server
  string address = 2;
  // the consul version of the server
  string version = 3;
}