//  Copyright 2016 Istio Authors
// 
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
// 
//      http://www.apache.org/licenses/LICENSE-2.0
// 
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.

//  This package defines the Mixer API that the sidecar proxy uses to perform
//  precondition checks, manage quotas, and report telemetry.
package v1

import (
	"github.com/golang/protobuf/ptypes/duration"
	"google.golang.org/genproto/googleapis/rpc/status"
)

//  Used to get a thumbs-up/thumbs-down before performing an action.
CheckRequest: {

	//  The attributes to use for this request.
	// 
	//  Mixer's configuration determines how these attributes are used to
	//  establish the result returned in the response.
	attributes?: CompressedAttributes @protobuf(1,"(gogoproto.nullable)=false")

	//  The number of words in the global dictionary, used with to populate the attributes.
	//  This value is used as a quick way to determine whether the client is using a dictionary that
	//  the server understands.
	globalWordCount?: uint32 @protobuf(2,name=global_word_count)

	//  Used for deduplicating `Check` calls in the case of failed RPCs and retries. This should be a UUID
	//  per call, where the same UUID is used for retries of the same call.
	deduplicationId?: string @protobuf(3,name=deduplication_id)

	//  The individual quotas to allocate
	quotas: {
		<_>: CheckRequest_QuotaParams
	} @protobuf(4,type=map<string,QuotaParams>,"(gogoproto.nullable)=false")
}

//  parameters for a quota allocation
CheckRequest_QuotaParams: {
	//  Amount of quota to allocate
	amount?: int64 @protobuf(1)

	//  When true, supports returning less quota than what was requested.
	bestEffort?: bool @protobuf(2,name=best_effort)
}

//  The response generated by the Check method.
CheckResponse: {

	//  The precondition check results.
	precondition?: CheckResponse_PreconditionResult @protobuf(2,type=PreconditionResult,"(gogoproto.nullable)=false")

	//  The resulting quota, one entry per requested quota.
	quotas: {
		<_>: CheckResponse_QuotaResult
	} @protobuf(3,type=map<string,QuotaResult>,"(gogoproto.nullable)=false")
}

//  Expresses the result of a precondition check.
CheckResponse_PreconditionResult: {

	//  A status code of OK indicates all preconditions were satisfied. Any other code indicates not
	//  all preconditions were satisfied and details describe why.
	status?: __status.Status @protobuf(1,type=google.rpc.Status,"(gogoproto.nullable)=false")

	//  The amount of time for which this result can be considered valid.
	validDuration?: duration.Duration @protobuf(2,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")

	//  The number of uses for which this result can be considered valid.
	validUseCount?: int32 @protobuf(3,name=valid_use_count)

	//  The total set of attributes that were used in producing the result
	//  along with matching conditions.
	referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes)

	//  An optional routing directive, used to manipulate the traffic metadata
	//  whenever all preconditions are satisfied.
	routeDirective?: RouteDirective @protobuf(6,name=route_directive)
}
__status = status

//  Expresses the result of a quota allocation.
CheckResponse_QuotaResult: {
	//  The amount of time for which this result can be considered valid.
	validDuration?: duration.Duration @protobuf(1,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")

	//  The amount of granted quota. When `QuotaParams.best_effort` is true, this will be >= 0.
	//  If `QuotaParams.best_effort` is false, this will be either 0 or >= `QuotaParams.amount`.
	grantedAmount?: int64 @protobuf(2,name=granted_amount)

	//  The total set of attributes that were used in producing the result
	//  along with matching conditions.
	referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes,"(gogoproto.nullable)=false")
}

//  Describes the attributes that were used to determine the response.
//  This can be used to construct a response cache.
ReferencedAttributes: {

	//  The message-level dictionary. Refer to [CompressedAttributes][istio.mixer.v1.CompressedAttributes] for information
	//  on using dictionaries.
	words?: [...string] @protobuf(1)

	//  Describes a set of attributes.
	attributeMatches?: [...ReferencedAttributes_AttributeMatch] @protobuf(2,type=AttributeMatch,name=attribute_matches,"(gogoproto.nullable)=false")
}

//  How an attribute's value was matched
ReferencedAttributes_Condition:
	*"CONDITION_UNSPECIFIED" | //  should not occur
	"ABSENCE" | //  match when attribute doesn't exist
	"EXACT" | //  match when attribute value is an exact byte-for-byte match
	"REGEX" //  match when attribute value matches the included regex

ReferencedAttributes_Condition_value: {
	"CONDITION_UNSPECIFIED": 0
	"ABSENCE":               1
	"EXACT":                 2
	"REGEX":                 3
}

//  Describes a single attribute match.
ReferencedAttributes_AttributeMatch: {
	//  The name of the attribute. This is a dictionary index encoded in a manner identical
	//  to all strings in the [CompressedAttributes][istio.mixer.v1.CompressedAttributes] message.
	name?: int32 @protobuf(1,type=sint32)

	//  The kind of match against the attribute value.
	condition?: ReferencedAttributes_Condition @protobuf(2,type=Condition)

	//  If a REGEX condition is provided for a STRING_MAP attribute,
	//  clients should use the regex value to match against map keys.
	regex?: string @protobuf(3)

	//  A key in a STRING_MAP. When multiple keys from a STRING_MAP
	//  attribute were referenced, there will be multiple AttributeMatch
	//  messages with different map_key values. Values for map_key SHOULD
	//  be ignored for attributes that are not STRING_MAP.
	// 
	//  Indices for the keys are used (taken either from the
	//  message dictionary from the `words` field or the global dictionary).
	// 
	//  If no map_key value is provided for a STRING_MAP attribute, the
	//  entire STRING_MAP will be used.
	mapKey?: int32 @protobuf(4,type=sint32,name=map_key)
}

//  Operation on HTTP headers to replace, append, or remove a header. Header
//  names are normalized to lower-case with dashes, e.g.  "x-request-id".
//  Pseudo-headers ":path", ":authority", and ":method" are supported to modify
//  the request headers.
HeaderOperation: {

	//  Header name.
	name?: string @protobuf(1)

	//  Header value.
	value?: string @protobuf(2)

	//  Header operation.
	operation?: HeaderOperation_Operation @protobuf(3,type=Operation)
}

//  Operation type.
HeaderOperation_Operation:
	*"REPLACE" | //  replaces the header with the given name
	"REMOVE" | //  removes the header with the given name (the value is ignored)
	"APPEND" //  appends the value to the header value, or sets it if not present

HeaderOperation_Operation_value: {
	"REPLACE": 0
	"REMOVE":  1
	"APPEND":  2
}

//  Expresses the routing manipulation actions to be performed on behalf of
//  Mixer in response to a precondition check.
RouteDirective: {
	//  Operations on the request headers.
	requestHeaderOperations?: [...HeaderOperation] @protobuf(1,name=request_header_operations,"(gogoproto.nullable)=false")

	//  Operations on the response headers.
	responseHeaderOperations?: [...HeaderOperation] @protobuf(2,name=response_header_operations,"(gogoproto.nullable)=false")

	//  If set, enables a direct response without proxying the request to the routing
	//  destination. Required to be a value in the 2xx or 3xx range.
	directResponseCode?: uint32 @protobuf(3,name=direct_response_code)

	//  Supplies the response body for the direct response.
	//  If this setting is omitted, no body is included in the generated response.
	directResponseBody?: string @protobuf(4,name=direct_response_body)
}

//  Used to report telemetry after performing one or more actions.
ReportRequest: {

	//  next value: 5

	//  The attributes to use for this request.
	// 
	//  Each `Attributes` element represents the state of a single action. Multiple actions
	//  can be provided in a single message in order to improve communication efficiency. The
	//  client can accumulate a set of actions and send them all in one single message.
	attributes?: [...CompressedAttributes] @protobuf(1,"(gogoproto.nullable)=false")

	//  Indicates how to decode the attributes sets in this request.
	repeatedAttributesSemantics?: ReportRequest_RepeatedAttributesSemantics @protobuf(4,type=RepeatedAttributesSemantics,name=repeated_attributes_semantics)

	//  The default message-level dictionary for all the attributes.
	//  Individual attribute messages can have their own dictionaries, but if they don't
	//  then this set of words, if it is provided, is used instead.
	// 
	//  This makes it possible to share the same dictionary for all attributes in this
	//  request, which can substantially reduce the overall request size.
	defaultWords?: [...string] @protobuf(2,name=default_words)

	//  The number of words in the global dictionary.
	//  To detect global dictionary out of sync between client and server.
	globalWordCount?: uint32 @protobuf(3,name=global_word_count)
}

//  Used to signal how the sets of compressed attributes should be reconstitued server-side.
ReportRequest_RepeatedAttributesSemantics:
	//  Use delta encoding between sets of compressed attributes to reduce the overall on-wire
	//  request size. Each individual set of attributes is used to modify the previous set.
	//  NOTE: There is no way with this encoding to specify attribute value deletion. This 
	//  option should be used with extreme caution.
	*"DELTA_ENCODING" |

	//  Treat each set of compressed attributes as complete - independent from other sets
	//  in this request. This will result in on-wire duplication of attributes and values, but
	//  will allow for proper accounting of absent values in overall encoding.
	"INDEPENDENT_ENCODING"

ReportRequest_RepeatedAttributesSemantics_value: {
	"DELTA_ENCODING":       0
	"INDEPENDENT_ENCODING": 1
}

//  Used to carry responses to telemetry reports
ReportResponse: {
}
