// Original file: deps/envoy-api/envoy/config/core/v3/config_source.proto

import type { Duration as _google_protobuf_Duration, Duration__Output as _google_protobuf_Duration__Output } from '../../../../google/protobuf/Duration';
import type { GrpcService as _envoy_config_core_v3_GrpcService, GrpcService__Output as _envoy_config_core_v3_GrpcService__Output } from '../../../../envoy/config/core/v3/GrpcService';
import type { RateLimitSettings as _envoy_config_core_v3_RateLimitSettings, RateLimitSettings__Output as _envoy_config_core_v3_RateLimitSettings__Output } from '../../../../envoy/config/core/v3/RateLimitSettings';
import type { ApiVersion as _envoy_config_core_v3_ApiVersion } from '../../../../envoy/config/core/v3/ApiVersion';

// Original file: deps/envoy-api/envoy/config/core/v3/config_source.proto

/**
 * APIs may be fetched via either REST or gRPC.
 */
export enum _envoy_config_core_v3_ApiConfigSource_ApiType {
  /**
   * Ideally this would be 'reserved 0' but one can't reserve the default
   * value. Instead we throw an exception if this is ever used.
   */
  DEPRECATED_AND_UNAVAILABLE_DO_NOT_USE = 0,
  /**
   * REST-JSON v2 API. The `canonical JSON encoding
   * <https://developers.google.com/protocol-buffers/docs/proto3#json>`_ for
   * the v2 protos is used.
   */
  REST = 1,
  /**
   * SotW gRPC service.
   */
  GRPC = 2,
  /**
   * Using the delta xDS gRPC service, i.e. DeltaDiscovery{Request,Response}
   * rather than Discovery{Request,Response}. Rather than sending Envoy the entire state
   * with every update, the xDS server only sends what has changed since the last update.
   */
  DELTA_GRPC = 3,
  /**
   * SotW xDS gRPC with ADS. All resources which resolve to this configuration source will be
   * multiplexed on a single connection to an ADS endpoint.
   * [#not-implemented-hide:]
   */
  AGGREGATED_GRPC = 5,
  /**
   * Delta xDS gRPC with ADS. All resources which resolve to this configuration source will be
   * multiplexed on a single connection to an ADS endpoint.
   * [#not-implemented-hide:]
   */
  AGGREGATED_DELTA_GRPC = 6,
}

/**
 * API configuration source. This identifies the API type and cluster that Envoy
 * will use to fetch an xDS API.
 * [#next-free-field: 9]
 */
export interface ApiConfigSource {
  /**
   * API type (gRPC, REST, delta gRPC)
   */
  'api_type'?: (_envoy_config_core_v3_ApiConfigSource_ApiType | keyof typeof _envoy_config_core_v3_ApiConfigSource_ApiType);
  /**
   * Cluster names should be used only with REST. If > 1
   * cluster is defined, clusters will be cycled through if any kind of failure
   * occurs.
   * 
   * .. note::
   * 
   * The cluster with name ``cluster_name`` must be statically defined and its
   * type must not be ``EDS``.
   */
  'cluster_names'?: (string)[];
  /**
   * For REST APIs, the delay between successive polls.
   */
  'refresh_delay'?: (_google_protobuf_Duration | null);
  /**
   * Multiple gRPC services be provided for GRPC. If > 1 cluster is defined,
   * services will be cycled through if any kind of failure occurs.
   */
  'grpc_services'?: (_envoy_config_core_v3_GrpcService)[];
  /**
   * For REST APIs, the request timeout. If not set, a default value of 1s will be used.
   */
  'request_timeout'?: (_google_protobuf_Duration | null);
  /**
   * For GRPC APIs, the rate limit settings. If present, discovery requests made by Envoy will be
   * rate limited.
   */
  'rate_limit_settings'?: (_envoy_config_core_v3_RateLimitSettings | null);
  /**
   * Skip the node identifier in subsequent discovery requests for streaming gRPC config types.
   */
  'set_node_on_first_message_only'?: (boolean);
  /**
   * API version for xDS transport protocol. This describes the xDS gRPC/REST
   * endpoint and version of [Delta]DiscoveryRequest/Response used on the wire.
   */
  'transport_api_version'?: (_envoy_config_core_v3_ApiVersion | keyof typeof _envoy_config_core_v3_ApiVersion);
}

/**
 * API configuration source. This identifies the API type and cluster that Envoy
 * will use to fetch an xDS API.
 * [#next-free-field: 9]
 */
export interface ApiConfigSource__Output {
  /**
   * API type (gRPC, REST, delta gRPC)
   */
  'api_type': (keyof typeof _envoy_config_core_v3_ApiConfigSource_ApiType);
  /**
   * Cluster names should be used only with REST. If > 1
   * cluster is defined, clusters will be cycled through if any kind of failure
   * occurs.
   * 
   * .. note::
   * 
   * The cluster with name ``cluster_name`` must be statically defined and its
   * type must not be ``EDS``.
   */
  'cluster_names': (string)[];
  /**
   * For REST APIs, the delay between successive polls.
   */
  'refresh_delay': (_google_protobuf_Duration__Output | null);
  /**
   * Multiple gRPC services be provided for GRPC. If > 1 cluster is defined,
   * services will be cycled through if any kind of failure occurs.
   */
  'grpc_services': (_envoy_config_core_v3_GrpcService__Output)[];
  /**
   * For REST APIs, the request timeout. If not set, a default value of 1s will be used.
   */
  'request_timeout': (_google_protobuf_Duration__Output | null);
  /**
   * For GRPC APIs, the rate limit settings. If present, discovery requests made by Envoy will be
   * rate limited.
   */
  'rate_limit_settings': (_envoy_config_core_v3_RateLimitSettings__Output | null);
  /**
   * Skip the node identifier in subsequent discovery requests for streaming gRPC config types.
   */
  'set_node_on_first_message_only': (boolean);
  /**
   * API version for xDS transport protocol. This describes the xDS gRPC/REST
   * endpoint and version of [Delta]DiscoveryRequest/Response used on the wire.
   */
  'transport_api_version': (keyof typeof _envoy_config_core_v3_ApiVersion);
}
