blob: ea7dfc039aecd7d65d45a63719f4cb9f961f4419 [file] [edit]
// Copyright 2021 Google LLC
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
// This is a generated file (see the discoveryapis_generator project).
// ignore_for_file: camel_case_types
// ignore_for_file: comment_references
// ignore_for_file: deprecated_member_use_from_same_package
// ignore_for_file: doc_directive_unknown
// ignore_for_file: lines_longer_than_80_chars
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: prefer_interpolation_to_compose_strings
// ignore_for_file: unintended_html_in_doc_comment
// ignore_for_file: unnecessary_brace_in_string_interps
// ignore_for_file: unnecessary_lambdas
// ignore_for_file: unnecessary_string_interpolations
/// Service Control API - v2
///
/// Provides admission control and telemetry reporting for services integrated
/// with Service Infrastructure.
///
/// For more information, see <https://cloud.google.com/service-control/>
///
/// Create an instance of [ServiceControlApi] to access these resources:
///
/// - [ServicesResource]
library;
import 'dart:async' as async;
import 'dart:convert' as convert;
import 'dart:core' as core;
import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
import 'package:http/http.dart' as http;
import '../shared.dart';
import '../src/user_agent.dart';
export 'package:_discoveryapis_commons/_discoveryapis_commons.dart'
show ApiRequestError, DetailedApiRequestError;
/// Provides admission control and telemetry reporting for services integrated
/// with Service Infrastructure.
class ServiceControlApi {
/// See, edit, configure, and delete your Google Cloud data and see the email
/// address for your Google Account.
static const cloudPlatformScope =
'https://www.googleapis.com/auth/cloud-platform';
/// Manage your Google Service Control data
static const servicecontrolScope =
'https://www.googleapis.com/auth/servicecontrol';
final commons.ApiRequester _requester;
ServicesResource get services => ServicesResource(_requester);
ServiceControlApi(
http.Client client, {
core.String rootUrl = 'https://servicecontrol.googleapis.com/',
core.String servicePath = '',
}) : _requester = commons.ApiRequester(
client,
rootUrl,
servicePath,
requestHeaders,
);
}
class ServicesResource {
final commons.ApiRequester _requester;
ServicesResource(commons.ApiRequester client) : _requester = client;
/// This method provides admission control for services that are integrated
/// with
/// [Service Infrastructure](https://cloud.google.com/service-infrastructure).
///
/// It checks whether an operation should be allowed based on the service
/// configuration and relevant policies. It must be called before the
/// operation is executed. For more information, see
/// [Admission Control](https://cloud.google.com/service-infrastructure/docs/admission-control).
/// NOTE: The admission control has an expected policy propagation delay of
/// 60s. The caller **must** not depend on the most recent policy changes.
/// NOTE: The admission control has a hard limit of 1 referenced resources per
/// call. If an operation refers to more than 1 resources, the caller must
/// call the Check method multiple times. This method requires the
/// `servicemanagement.services.check` permission on the specified service.
/// For more information, see
/// [Service Control API Access Control](https://cloud.google.com/service-infrastructure/docs/service-control/access-control).
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [serviceName] - The service name as specified in its service
/// configuration. For example, `"pubsub.googleapis.com"`. See
/// [google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service)
/// for the definition of a service name.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [CheckResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<CheckResponse> check(
CheckRequest request,
core.String serviceName, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ =
'v2/services/' + commons.escapeVariable('$serviceName') + ':check';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return CheckResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// This method provides telemetry reporting for services that are integrated
/// with
/// [Service Infrastructure](https://cloud.google.com/service-infrastructure).
///
/// It reports a list of operations that have occurred on a service. It must
/// be called after the operations have been executed. For more information,
/// see
/// [Telemetry Reporting](https://cloud.google.com/service-infrastructure/docs/telemetry-reporting).
/// NOTE: The telemetry reporting has a hard limit of 100 operations and 1MB
/// per Report call. This method requires the
/// `servicemanagement.services.report` permission on the specified service.
/// For more information, see
/// [Service Control API Access Control](https://cloud.google.com/service-infrastructure/docs/service-control/access-control).
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [serviceName] - The service name as specified in its service
/// configuration. For example, `"pubsub.googleapis.com"`. See
/// [google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service)
/// for the definition of a service name.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ReportResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<ReportResponse> report(
ReportRequest request,
core.String serviceName, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ =
'v2/services/' + commons.escapeVariable('$serviceName') + ':report';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return ReportResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
/// This message defines attributes associated with API operations, such as a
/// network API request.
///
/// The terminology is based on the conventions used by Google APIs, Istio, and
/// OpenAPI.
class Api {
/// The API operation name.
///
/// For gRPC requests, it is the fully qualified API method name, such as
/// "google.pubsub.v1.Publisher.Publish". For OpenAPI requests, it is the
/// `operationId`, such as "getPet".
core.String? operation;
/// The API protocol used for sending the request, such as "http", "https",
/// "grpc", or "internal".
core.String? protocol;
/// The API service name.
///
/// It is a logical identifier for a networked API, such as
/// "pubsub.googleapis.com". The naming syntax depends on the API management
/// system being used for handling the request.
core.String? service;
/// The API version associated with the API operation above, such as "v1" or
/// "v1alpha1".
core.String? version;
Api({this.operation, this.protocol, this.service, this.version});
Api.fromJson(core.Map json_)
: this(
operation: json_['operation'] as core.String?,
protocol: json_['protocol'] as core.String?,
service: json_['service'] as core.String?,
version: json_['version'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final operation = this.operation;
final protocol = this.protocol;
final service = this.service;
final version = this.version;
return {
'operation': ?operation,
'protocol': ?protocol,
'service': ?service,
'version': ?version,
};
}
}
/// This message defines the standard attribute vocabulary for Google APIs.
///
/// An attribute is a piece of metadata that describes an activity on a network
/// service. For example, the size of an HTTP request, or the status code of an
/// HTTP response. Each attribute has a type and a name, which is logically
/// defined as a proto message field in `AttributeContext`. The field type
/// becomes the attribute type, and the field path becomes the attribute name.
/// For example, the attribute `source.ip` maps to field
/// `AttributeContext.source.ip`. This message definition is guaranteed not to
/// have any wire breaking change. So you can use it directly for passing
/// attributes across different systems. NOTE: Different system may generate
/// different subset of attributes. Please verify the system specification
/// before relying on an attribute generated a system.
class AttributeContext {
/// Represents an API operation that is involved to a network activity.
Api? api;
/// The destination of a network activity, such as accepting a TCP connection.
///
/// In a multi hop network activity, the destination represents the receiver
/// of the last hop.
Peer? destination;
/// Supports extensions for advanced use cases, such as logs and metrics.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.List<core.Map<core.String, core.Object?>>? extensions;
/// The origin of a network activity.
///
/// In a multi hop network activity, the origin represents the sender of the
/// first hop. For the first hop, the `source` and the `origin` must have the
/// same content.
Peer? origin;
/// Represents a network request, such as an HTTP request.
Request? request;
/// Represents a target resource that is involved with a network activity.
///
/// If multiple resources are involved with an activity, this must be the
/// primary one.
Resource? resource;
/// Represents a network response, such as an HTTP response.
Response? response;
/// The source of a network activity, such as starting a TCP connection.
///
/// In a multi hop network activity, the source represents the sender of the
/// last hop.
Peer? source;
AttributeContext({
this.api,
this.destination,
this.extensions,
this.origin,
this.request,
this.resource,
this.response,
this.source,
});
AttributeContext.fromJson(core.Map json_)
: this(
api: json_.containsKey('api')
? Api.fromJson(json_['api'] as core.Map<core.String, core.dynamic>)
: null,
destination: json_.containsKey('destination')
? Peer.fromJson(
json_['destination'] as core.Map<core.String, core.dynamic>,
)
: null,
extensions: (json_['extensions'] as core.List?)
?.map((value) => value as core.Map<core.String, core.dynamic>)
.toList(),
origin: json_.containsKey('origin')
? Peer.fromJson(
json_['origin'] as core.Map<core.String, core.dynamic>,
)
: null,
request: json_.containsKey('request')
? Request.fromJson(
json_['request'] as core.Map<core.String, core.dynamic>,
)
: null,
resource: json_.containsKey('resource')
? Resource.fromJson(
json_['resource'] as core.Map<core.String, core.dynamic>,
)
: null,
response: json_.containsKey('response')
? Response.fromJson(
json_['response'] as core.Map<core.String, core.dynamic>,
)
: null,
source: json_.containsKey('source')
? Peer.fromJson(
json_['source'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final api = this.api;
final destination = this.destination;
final extensions = this.extensions;
final origin = this.origin;
final request = this.request;
final resource = this.resource;
final response = this.response;
final source = this.source;
return {
'api': ?api,
'destination': ?destination,
'extensions': ?extensions,
'origin': ?origin,
'request': ?request,
'resource': ?resource,
'response': ?response,
'source': ?source,
};
}
}
/// This message defines request authentication attributes.
///
/// Terminology is based on the JSON Web Token (JWT) standard, but the terms
/// also correlate to concepts in other standards.
class Auth {
/// A list of access level resource names that allow resources to be accessed
/// by authenticated requester.
///
/// It is part of Secure GCP processing for the incoming request. An access
/// level string has the format:
/// "//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}"
/// Example:
/// "//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL"
core.List<core.String>? accessLevels;
/// The intended audience(s) for this authentication information.
///
/// Reflects the audience (`aud`) claim within a JWT. The audience value(s)
/// depends on the `issuer`, but typically include one or more of the
/// following pieces of information: * The services intended to receive the
/// credential. For example, \["https://pubsub.googleapis.com/",
/// "https://storage.googleapis.com/"\]. * A set of service-based scopes. For
/// example, \["https://www.googleapis.com/auth/cloud-platform"\]. * The
/// client id of an app, such as the Firebase project id for JWTs from
/// Firebase Auth. Consult the documentation for the credential issuer to
/// determine the information provided.
core.List<core.String>? audiences;
/// Structured claims presented with the credential.
///
/// JWTs include `{key: value}` pairs for standard and private claims. The
/// following is a subset of the standard required and optional claims that
/// would typically be presented for a Google-based JWT: {'iss':
/// 'accounts.google.com', 'sub': '113289723416554971153', 'aud':
/// \['123456789012', 'pubsub.googleapis.com'\], 'azp':
/// '123456789012.apps.googleusercontent.com', 'email': 'jsmith@example.com',
/// 'iat': 1353601026, 'exp': 1353604926} SAML assertions are similarly
/// specified, but with an identity provider dependent structure.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object?>? claims;
/// Attributes of the OAuth token associated with the request.
Oauth? oauth;
/// The authorized presenter of the credential.
///
/// Reflects the optional Authorized Presenter (`azp`) claim within a JWT or
/// the OAuth client id. For example, a Google Cloud Platform client id looks
/// as follows: "123456789012.apps.googleusercontent.com".
core.String? presenter;
/// The authenticated principal.
///
/// Reflects the issuer (`iss`) and subject (`sub`) claims within a JWT. The
/// issuer and subject should be `/` delimited, with `/` percent-encoded
/// within the subject fragment. For Google accounts, the principal format is:
/// "https://accounts.google.com/{id}"
core.String? principal;
Auth({
this.accessLevels,
this.audiences,
this.claims,
this.oauth,
this.presenter,
this.principal,
});
Auth.fromJson(core.Map json_)
: this(
accessLevels: (json_['accessLevels'] as core.List?)
?.map((value) => value as core.String)
.toList(),
audiences: (json_['audiences'] as core.List?)
?.map((value) => value as core.String)
.toList(),
claims: json_.containsKey('claims')
? json_['claims'] as core.Map<core.String, core.dynamic>
: null,
oauth: json_.containsKey('oauth')
? Oauth.fromJson(
json_['oauth'] as core.Map<core.String, core.dynamic>,
)
: null,
presenter: json_['presenter'] as core.String?,
principal: json_['principal'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final accessLevels = this.accessLevels;
final audiences = this.audiences;
final claims = this.claims;
final oauth = this.oauth;
final presenter = this.presenter;
final principal = this.principal;
return {
'accessLevels': ?accessLevels,
'audiences': ?audiences,
'claims': ?claims,
'oauth': ?oauth,
'presenter': ?presenter,
'principal': ?principal,
};
}
}
/// Request message for the Check method.
class CheckRequest {
/// Describes attributes about the operation being executed by the service.
AttributeContext? attributes;
/// Contains a comma-separated list of flags.
///
/// Optional.
core.String? flags;
/// Describes the resources and the policies applied to each resource.
core.List<ResourceInfo>? resources;
/// Specifies the version of the service configuration that should be used to
/// process the request.
///
/// Must not be empty. Set this field to 'latest' to specify using the latest
/// configuration.
core.String? serviceConfigId;
CheckRequest({
this.attributes,
this.flags,
this.resources,
this.serviceConfigId,
});
CheckRequest.fromJson(core.Map json_)
: this(
attributes: json_.containsKey('attributes')
? AttributeContext.fromJson(
json_['attributes'] as core.Map<core.String, core.dynamic>,
)
: null,
flags: json_['flags'] as core.String?,
resources: (json_['resources'] as core.List?)
?.map(
(value) => ResourceInfo.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
serviceConfigId: json_['serviceConfigId'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final attributes = this.attributes;
final flags = this.flags;
final resources = this.resources;
final serviceConfigId = this.serviceConfigId;
return {
'attributes': ?attributes,
'flags': ?flags,
'resources': ?resources,
'serviceConfigId': ?serviceConfigId,
};
}
}
/// Response message for the Check method.
class CheckResponse {
/// Optional response metadata that will be emitted as dynamic metadata to be
/// consumed by the caller of ServiceController.
///
/// For compatibility with the ext_authz interface.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object?>? dynamicMetadata;
/// Returns a set of request contexts generated from the `CheckRequest`.
core.Map<core.String, core.String>? headers;
/// Operation is allowed when this field is not set.
///
/// Any non-'OK' status indicates a denial; google.rpc.Status.details would
/// contain additional details about the denial.
Status? status;
CheckResponse({this.dynamicMetadata, this.headers, this.status});
CheckResponse.fromJson(core.Map json_)
: this(
dynamicMetadata: json_.containsKey('dynamicMetadata')
? json_['dynamicMetadata'] as core.Map<core.String, core.dynamic>
: null,
headers: (json_['headers'] as core.Map<core.String, core.dynamic>?)
?.map((key, value) => core.MapEntry(key, value as core.String)),
status: json_.containsKey('status')
? Status.fromJson(
json_['status'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final dynamicMetadata = this.dynamicMetadata;
final headers = this.headers;
final status = this.status;
return {
'dynamicMetadata': ?dynamicMetadata,
'headers': ?headers,
'status': ?status,
};
}
}
/// This message defines attributes associated with OAuth credentials.
class Oauth {
/// The optional OAuth client ID.
///
/// This is the unique public identifier issued by an authorization server to
/// a registered client application. Empty string is equivalent to no oauth
/// client id. WARNING: This is for MCP tools/call and tools/list
/// authorization and not for general use.
core.String? clientId;
Oauth({this.clientId});
Oauth.fromJson(core.Map json_)
: this(clientId: json_['clientId'] as core.String?);
core.Map<core.String, core.dynamic> toJson() {
final clientId = this.clientId;
return {'clientId': ?clientId};
}
}
/// This message defines attributes for a node that handles a network request.
///
/// The node can be either a service or an application that sends, forwards, or
/// receives the request. Service peers should fill in `principal` and `labels`
/// as appropriate.
class Peer {
/// The IP address of the peer.
core.String? ip;
/// The labels associated with the peer.
core.Map<core.String, core.String>? labels;
/// The network port of the peer.
core.String? port;
/// The identity of this peer.
///
/// Similar to `Request.auth.principal`, but relative to the peer instead of
/// the request. For example, the identity associated with a load balancer
/// that forwarded the request.
core.String? principal;
/// The CLDR country/region code associated with the above IP address.
///
/// If the IP address is private, the `region_code` should reflect the
/// physical location where this peer is running.
core.String? regionCode;
Peer({this.ip, this.labels, this.port, this.principal, this.regionCode});
Peer.fromJson(core.Map json_)
: this(
ip: json_['ip'] as core.String?,
labels: (json_['labels'] as core.Map<core.String, core.dynamic>?)?.map(
(key, value) => core.MapEntry(key, value as core.String),
),
port: json_['port'] as core.String?,
principal: json_['principal'] as core.String?,
regionCode: json_['regionCode'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final ip = this.ip;
final labels = this.labels;
final port = this.port;
final principal = this.principal;
final regionCode = this.regionCode;
return {
'ip': ?ip,
'labels': ?labels,
'port': ?port,
'principal': ?principal,
'regionCode': ?regionCode,
};
}
}
/// Request message for the Report method.
class ReportRequest {
/// Describes the list of operations to be reported.
///
/// Each operation is represented as an AttributeContext, and contains all
/// attributes around an API access.
core.List<AttributeContext>? operations;
/// Specifies the version of the service configuration that should be used to
/// process the request.
///
/// Must not be empty. Set this field to 'latest' to specify using the latest
/// configuration.
core.String? serviceConfigId;
ReportRequest({this.operations, this.serviceConfigId});
ReportRequest.fromJson(core.Map json_)
: this(
operations: (json_['operations'] as core.List?)
?.map(
(value) => AttributeContext.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
serviceConfigId: json_['serviceConfigId'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final operations = this.operations;
final serviceConfigId = this.serviceConfigId;
return {'operations': ?operations, 'serviceConfigId': ?serviceConfigId};
}
}
/// Response message for the Report method.
class ReportResponse {
/// The extension field to store serialized OTel responses.
///
/// e.g. ExportLogsServiceResponse, ExportMetricsServiceResponse.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object?>? extensions;
ReportResponse({this.extensions});
ReportResponse.fromJson(core.Map json_)
: this(
extensions: json_.containsKey('extensions')
? json_['extensions'] as core.Map<core.String, core.dynamic>
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final extensions = this.extensions;
return {'extensions': ?extensions};
}
}
/// This message defines attributes for an HTTP request.
///
/// If the actual request is not an HTTP request, the runtime system should try
/// to map the actual request to an equivalent HTTP request.
class Request {
/// The request authentication.
///
/// May be absent for unauthenticated requests. Derived from the HTTP request
/// `Authorization` header or equivalent.
Auth? auth;
/// The HTTP request headers.
///
/// If multiple headers share the same key, they must be merged according to
/// the HTTP spec. All header keys must be lowercased, because HTTP header
/// keys are case-insensitive.
core.Map<core.String, core.String>? headers;
/// The HTTP request `Host` header value.
core.String? host;
/// The unique ID for a request, which can be propagated to downstream
/// systems.
///
/// The ID should have low probability of collision within a single day for a
/// specific service.
core.String? id;
/// The HTTP request method, such as `GET`, `POST`.
core.String? method;
/// The values from Origin header from the HTTP request, such as
/// "https://console.cloud.google.com".
///
/// Modern browsers can only have one origin. Special browsers and/or HTTP
/// clients may require multiple origins.
core.String? origin;
/// The HTTP URL path, excluding the query parameters.
core.String? path;
/// The network protocol used with the request, such as "http/1.1", "spdy/3",
/// "h2", "h2c", "webrtc", "tcp", "udp", "quic".
///
/// See
/// https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
/// for details.
core.String? protocol;
/// The HTTP URL query in the format of `name1=value1&name2=value2`, as it
/// appears in the first line of the HTTP request.
///
/// No decoding is performed.
core.String? query;
/// A special parameter for request reason.
///
/// It is used by security systems to associate auditing information with a
/// request.
core.String? reason;
/// The HTTP URL scheme, such as `http` and `https`.
core.String? scheme;
/// The HTTP request size in bytes.
///
/// If unknown, it must be -1.
core.String? size;
/// The timestamp when the `destination` service receives the last byte of the
/// request.
core.String? time;
Request({
this.auth,
this.headers,
this.host,
this.id,
this.method,
this.origin,
this.path,
this.protocol,
this.query,
this.reason,
this.scheme,
this.size,
this.time,
});
Request.fromJson(core.Map json_)
: this(
auth: json_.containsKey('auth')
? Auth.fromJson(
json_['auth'] as core.Map<core.String, core.dynamic>,
)
: null,
headers: (json_['headers'] as core.Map<core.String, core.dynamic>?)
?.map((key, value) => core.MapEntry(key, value as core.String)),
host: json_['host'] as core.String?,
id: json_['id'] as core.String?,
method: json_['method'] as core.String?,
origin: json_['origin'] as core.String?,
path: json_['path'] as core.String?,
protocol: json_['protocol'] as core.String?,
query: json_['query'] as core.String?,
reason: json_['reason'] as core.String?,
scheme: json_['scheme'] as core.String?,
size: json_['size'] as core.String?,
time: json_['time'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final auth = this.auth;
final headers = this.headers;
final host = this.host;
final id = this.id;
final method = this.method;
final origin = this.origin;
final path = this.path;
final protocol = this.protocol;
final query = this.query;
final reason = this.reason;
final scheme = this.scheme;
final size = this.size;
final time = this.time;
return {
'auth': ?auth,
'headers': ?headers,
'host': ?host,
'id': ?id,
'method': ?method,
'origin': ?origin,
'path': ?path,
'protocol': ?protocol,
'query': ?query,
'reason': ?reason,
'scheme': ?scheme,
'size': ?size,
'time': ?time,
};
}
}
/// This message defines core attributes for a resource.
///
/// A resource is an addressable (named) entity provided by the destination
/// service. For example, a file stored on a network storage service.
class Resource {
/// Annotations is an unstructured key-value map stored with a resource that
/// may be set by external tools to store and retrieve arbitrary metadata.
///
/// They are not queryable and should be preserved when modifying objects.
/// More info:
/// https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
core.Map<core.String, core.String>? annotations;
/// The timestamp when the resource was created.
///
/// This may be either the time creation was initiated or when it was
/// completed.
///
/// Output only.
core.String? createTime;
/// The timestamp when the resource was deleted.
///
/// If the resource is not deleted, this must be empty.
///
/// Output only.
core.String? deleteTime;
/// Mutable.
///
/// The display name set by clients. Must be \<= 63 characters.
core.String? displayName;
/// An opaque value that uniquely identifies a version or generation of a
/// resource.
///
/// It can be used to confirm that the client and server agree on the ordering
/// of a resource being written.
///
/// Output only.
core.String? etag;
/// The labels or tags on the resource, such as AWS resource tags and
/// Kubernetes resource labels.
core.Map<core.String, core.String>? labels;
/// The location of the resource.
///
/// The location encoding is specific to the service provider, and new
/// encoding may be introduced as the service evolves. For Google Cloud
/// products, the encoding is what is used by Google Cloud APIs, such as
/// `us-east1`, `aws-us-east-1`, and `azure-eastus2`. The semantics of
/// `location` is identical to the `cloud.googleapis.com/location` label used
/// by some Google Cloud APIs.
///
/// Immutable.
core.String? location;
/// The stable identifier (name) of a resource on the `service`.
///
/// A resource can be logically identified as
/// "//{resource.service}/{resource.name}". The differences between a resource
/// name and a URI are: * Resource name is a logical identifier, independent
/// of network protocol and API version. For example,
/// `//pubsub.googleapis.com/projects/123/topics/news-feed`. * URI often
/// includes protocol and version information, so it can be used directly by
/// applications. For example,
/// `https://pubsub.googleapis.com/v1/projects/123/topics/news-feed`. See
/// https://cloud.google.com/apis/design/resource_names for details.
core.String? name;
/// The name of the service that this resource belongs to, such as
/// `pubsub.googleapis.com`.
///
/// The service may be different from the DNS hostname that actually serves
/// the request.
core.String? service;
/// The type of the resource.
///
/// The syntax is platform-specific because different platforms define their
/// resources differently. For Google APIs, the type format must be
/// "{service}/{kind}", such as "pubsub.googleapis.com/Topic".
core.String? type;
/// The unique identifier of the resource.
///
/// UID is unique in the time and space for this resource within the scope of
/// the service. It is typically generated by the server on successful
/// creation of a resource and must not be changed. UID is used to uniquely
/// identify resources with resource name reuses. This should be a UUID4.
core.String? uid;
/// The timestamp when the resource was last updated.
///
/// Any change to the resource made by users must refresh this value. Changes
/// to a resource made by the service should refresh this value.
///
/// Output only.
core.String? updateTime;
Resource({
this.annotations,
this.createTime,
this.deleteTime,
this.displayName,
this.etag,
this.labels,
this.location,
this.name,
this.service,
this.type,
this.uid,
this.updateTime,
});
Resource.fromJson(core.Map json_)
: this(
annotations:
(json_['annotations'] as core.Map<core.String, core.dynamic>?)?.map(
(key, value) => core.MapEntry(key, value as core.String),
),
createTime: json_['createTime'] as core.String?,
deleteTime: json_['deleteTime'] as core.String?,
displayName: json_['displayName'] as core.String?,
etag: json_['etag'] as core.String?,
labels: (json_['labels'] as core.Map<core.String, core.dynamic>?)?.map(
(key, value) => core.MapEntry(key, value as core.String),
),
location: json_['location'] as core.String?,
name: json_['name'] as core.String?,
service: json_['service'] as core.String?,
type: json_['type'] as core.String?,
uid: json_['uid'] as core.String?,
updateTime: json_['updateTime'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final annotations = this.annotations;
final createTime = this.createTime;
final deleteTime = this.deleteTime;
final displayName = this.displayName;
final etag = this.etag;
final labels = this.labels;
final location = this.location;
final name = this.name;
final service = this.service;
final type = this.type;
final uid = this.uid;
final updateTime = this.updateTime;
return {
'annotations': ?annotations,
'createTime': ?createTime,
'deleteTime': ?deleteTime,
'displayName': ?displayName,
'etag': ?etag,
'labels': ?labels,
'location': ?location,
'name': ?name,
'service': ?service,
'type': ?type,
'uid': ?uid,
'updateTime': ?updateTime,
};
}
}
/// Describes a resource referenced in the request.
class ResourceInfo {
/// The identifier of the container of this resource.
///
/// For Google Cloud APIs, the resource container must be one of the following
/// formats: - `projects/` - `folders/` - `organizations/` Required for the
/// policy enforcement on the container level (e.g. VPCSC, Location Policy
/// check, Org Policy check).
///
/// Optional.
core.String? container;
/// The location of the resource, it must be a valid zone, region or
/// multiregion, for example: "europe-west4", "northamerica-northeast1-a".
///
/// Required for location policy check.
///
/// Optional.
core.String? location;
/// The name of the resource referenced in the request.
core.String? name;
/// The resource permission needed for this request.
///
/// The format must be "{service}/{plural}.{verb}".
core.String? permission;
/// The resource type in the format of "{service}/{kind}".
core.String? type;
ResourceInfo({
this.container,
this.location,
this.name,
this.permission,
this.type,
});
ResourceInfo.fromJson(core.Map json_)
: this(
container: json_['container'] as core.String?,
location: json_['location'] as core.String?,
name: json_['name'] as core.String?,
permission: json_['permission'] as core.String?,
type: json_['type'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final container = this.container;
final location = this.location;
final name = this.name;
final permission = this.permission;
final type = this.type;
return {
'container': ?container,
'location': ?location,
'name': ?name,
'permission': ?permission,
'type': ?type,
};
}
}
/// This message defines attributes for a typical network response.
///
/// It generally models semantics of an HTTP response.
class Response {
/// The amount of time it takes the backend service to fully respond to a
/// request.
///
/// Measured from when the destination service starts to send the request to
/// the backend until when the destination service receives the complete
/// response from the backend.
core.String? backendLatency;
/// The HTTP response status code, such as `200` and `404`.
core.String? code;
/// The HTTP response headers.
///
/// If multiple headers share the same key, they must be merged according to
/// HTTP spec. All header keys must be lowercased, because HTTP header keys
/// are case-insensitive.
core.Map<core.String, core.String>? headers;
/// The HTTP response size in bytes.
///
/// If unknown, it must be -1.
core.String? size;
/// The timestamp when the `destination` service sends the last byte of the
/// response.
core.String? time;
Response({
this.backendLatency,
this.code,
this.headers,
this.size,
this.time,
});
Response.fromJson(core.Map json_)
: this(
backendLatency: json_['backendLatency'] as core.String?,
code: json_['code'] as core.String?,
headers: (json_['headers'] as core.Map<core.String, core.dynamic>?)
?.map((key, value) => core.MapEntry(key, value as core.String)),
size: json_['size'] as core.String?,
time: json_['time'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final backendLatency = this.backendLatency;
final code = this.code;
final headers = this.headers;
final size = this.size;
final time = this.time;
return {
'backendLatency': ?backendLatency,
'code': ?code,
'headers': ?headers,
'size': ?size,
'time': ?time,
};
}
}
/// The `Status` type defines a logical error model that is suitable for
/// different programming environments, including REST APIs and RPC APIs.
///
/// It is used by [gRPC](https://github.com/grpc). Each `Status` message
/// contains three pieces of data: error code, error message, and error details.
/// You can find out more about this error model and how to work with it in the
/// [API Design Guide](https://cloud.google.com/apis/design/errors).
typedef Status = $Status00;