blob: 4f246d205f83d3563e82d5b7987b10710999e238 [file] [edit]
// Copyright 2023 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
/// Firebase App Distribution API - v1
///
/// For more information, see
/// <https://firebase.google.com/products/app-distribution>
///
/// Create an instance of [FirebaseAppDistributionApi] to access these
/// resources:
///
/// - [MediaResource]
/// - [ProjectsResource]
/// - [ProjectsAppsResource]
/// - [ProjectsAppsReleasesResource]
/// - [ProjectsAppsReleasesFeedbackReportsResource]
/// - [ProjectsAppsReleasesOperationsResource]
/// - [ProjectsGroupsResource]
/// - [ProjectsTestersResource]
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,
ByteRange,
DetailedApiRequestError,
DownloadOptions,
Media,
PartialDownloadOptions,
ResumableUploadOptions,
UploadOptions;
class FirebaseAppDistributionApi {
/// 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';
final commons.ApiRequester _requester;
MediaResource get media => MediaResource(_requester);
ProjectsResource get projects => ProjectsResource(_requester);
FirebaseAppDistributionApi(
http.Client client, {
core.String rootUrl = 'https://firebaseappdistribution.googleapis.com/',
core.String servicePath = '',
}) : _requester = commons.ApiRequester(
client,
rootUrl,
servicePath,
requestHeaders,
);
}
class MediaResource {
final commons.ApiRequester _requester;
MediaResource(commons.ApiRequester client) : _requester = client;
/// Uploads a binary.
///
/// Uploading a binary can result in a new release being created, an update to
/// an existing release, or a no-op if a release with the same binary already
/// exists.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [app] - Required. The name of the app resource. Format:
/// `projects/{project_number}/apps/{app}`
/// Value must have pattern `^projects/\[^/\]+/apps/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// [uploadMedia] - The media to upload.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// 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<GoogleLongrunningOperation> upload(
GoogleFirebaseAppdistroV1UploadReleaseRequest request,
core.String app, {
core.String? $fields,
commons.Media? uploadMedia,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
core.String url_;
if (uploadMedia == null) {
url_ = 'v1/' + core.Uri.encodeFull('$app') + '/releases:upload';
} else {
url_ = '/upload/v1/' + core.Uri.encodeFull('$app') + '/releases:upload';
}
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
uploadMedia: uploadMedia,
uploadOptions: commons.UploadOptions.defaultOptions,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
class ProjectsResource {
final commons.ApiRequester _requester;
ProjectsAppsResource get apps => ProjectsAppsResource(_requester);
ProjectsGroupsResource get groups => ProjectsGroupsResource(_requester);
ProjectsTestersResource get testers => ProjectsTestersResource(_requester);
ProjectsResource(commons.ApiRequester client) : _requester = client;
}
class ProjectsAppsResource {
final commons.ApiRequester _requester;
ProjectsAppsReleasesResource get releases =>
ProjectsAppsReleasesResource(_requester);
ProjectsAppsResource(commons.ApiRequester client) : _requester = client;
/// Gets Android App Bundle (AAB) information for a Firebase app.
///
/// Request parameters:
///
/// [name] - Required. The name of the `AabInfo` resource to retrieve. Format:
/// `projects/{project_number}/apps/{app}/aabInfo`
/// Value must have pattern `^projects/\[^/\]+/apps/\[^/\]+/aabInfo$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1AabInfo].
///
/// 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<GoogleFirebaseAppdistroV1AabInfo> getAabInfo(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1AabInfo.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
class ProjectsAppsReleasesResource {
final commons.ApiRequester _requester;
ProjectsAppsReleasesFeedbackReportsResource get feedbackReports =>
ProjectsAppsReleasesFeedbackReportsResource(_requester);
ProjectsAppsReleasesOperationsResource get operations =>
ProjectsAppsReleasesOperationsResource(_requester);
ProjectsAppsReleasesResource(commons.ApiRequester client)
: _requester = client;
/// Deletes releases.
///
/// A maximum of 100 releases can be deleted per request.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The name of the app resource, which is the parent of
/// the release resources. Format: `projects/{project_number}/apps/{app}`
/// Value must have pattern `^projects/\[^/\]+/apps/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// 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<GoogleProtobufEmpty> batchDelete(
GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest request,
core.String parent, {
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_ =
'v1/' + core.Uri.encodeFull('$parent') + '/releases:batchDelete';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Distributes a release to testers.
///
/// This call does the following: 1. Creates testers for the specified emails,
/// if none exist. 2. Adds the testers and groups to the release. 3. Sends new
/// testers an invitation email. 4. Sends existing testers a new release
/// email. The request will fail with a `INVALID_ARGUMENT` if it contains a
/// group that doesn't exist.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. The name of the release resource to distribute. Format:
/// `projects/{project_number}/apps/{app}/releases/{release}`
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1DistributeReleaseResponse].
///
/// 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<GoogleFirebaseAppdistroV1DistributeReleaseResponse> distribute(
GoogleFirebaseAppdistroV1DistributeReleaseRequest request,
core.String name, {
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_ = 'v1/' + core.Uri.encodeFull('$name') + ':distribute';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1DistributeReleaseResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Gets a release.
///
/// Request parameters:
///
/// [name] - Required. The name of the release resource to retrieve. Format:
/// projects/{project_number}/apps/{app}/releases/{release}
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1Release].
///
/// 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<GoogleFirebaseAppdistroV1Release> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1Release.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Lists releases.
///
/// By default, sorts by `createTime` in descending order.
///
/// Request parameters:
///
/// [parent] - Required. The name of the app resource, which is the parent of
/// the release resources. Format: `projects/{project_number}/apps/{app}`
/// Value must have pattern `^projects/\[^/\]+/apps/\[^/\]+$`.
///
/// [filter] - Optional. The expression to filter releases listed in the
/// response. To learn more about filtering, refer to \[Google's AIP-160
/// standard\](http://aip.dev/160). Supported fields: - `releaseNotes.text`
/// supports `=` (can contain a wildcard character (`*`) at the beginning or
/// end of the string) - `createTime` supports `<`, `<=`, `>` and `>=`, and
/// expects an RFC-3339 formatted string Examples: - `createTime <=
/// "2021-09-08T00:00:00+04:00"` - `releaseNotes.text="fixes" AND createTime
/// >= "2021-09-08T00:00:00.0Z"` - `releaseNotes.text="*v1.0.0-rc*"`
///
/// [orderBy] - Optional. The fields used to order releases. Supported fields:
/// - `createTime` To specify descending order for a field, append a "desc"
/// suffix, for example, `createTime desc`. If this parameter is not set,
/// releases are ordered by `createTime` in descending order.
///
/// [pageSize] - Optional. The maximum number of releases to return. The
/// service may return fewer than this value. The valid range is \[1-100\]; If
/// unspecified (0), at most 25 releases are returned. Values above 100 are
/// coerced to 100.
///
/// [pageToken] - Optional. A page token, received from a previous
/// `ListReleases` call. Provide this to retrieve the subsequent page. When
/// paginating, all other parameters provided to `ListReleases` must match the
/// call that provided the page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1ListReleasesResponse].
///
/// 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<GoogleFirebaseAppdistroV1ListReleasesResponse> list(
core.String parent, {
core.String? filter,
core.String? orderBy,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'filter': ?filter == null ? null : [filter],
'orderBy': ?orderBy == null ? null : [orderBy],
'pageSize': ?pageSize == null ? null : ['${pageSize}'],
'pageToken': ?pageToken == null ? null : [pageToken],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$parent') + '/releases';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1ListReleasesResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Updates a release.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The name of the release resource. Format:
/// `projects/{project_number}/apps/{app}/releases/{release}`
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+$`.
///
/// [updateMask] - Optional. The list of fields to update.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1Release].
///
/// 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<GoogleFirebaseAppdistroV1Release> patch(
GoogleFirebaseAppdistroV1Release request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'updateMask': ?updateMask == null ? null : [updateMask],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1Release.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
class ProjectsAppsReleasesFeedbackReportsResource {
final commons.ApiRequester _requester;
ProjectsAppsReleasesFeedbackReportsResource(commons.ApiRequester client)
: _requester = client;
/// Deletes a feedback report.
///
/// Request parameters:
///
/// [name] - Required. The name of the feedback report to delete. Format:
/// projects/{project_number}/apps/{app}/releases/{release}/feedbackReports/{feedback_report}
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+/feedbackReports/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// 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<GoogleProtobufEmpty> delete(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'DELETE',
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Gets a feedback report.
///
/// Request parameters:
///
/// [name] - Required. The name of the feedback report to retrieve. Format:
/// projects/{project_number}/apps/{app}/releases/{release}/feedbackReports/{feedback_report}
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+/feedbackReports/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1FeedbackReport].
///
/// 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<GoogleFirebaseAppdistroV1FeedbackReport> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1FeedbackReport.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Lists feedback reports.
///
/// By default, sorts by `createTime` in descending order.
///
/// Request parameters:
///
/// [parent] - Required. The name of the release resource, which is the parent
/// of the feedback report resources. Format:
/// `projects/{project_number}/apps/{app}/releases/{release}`
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+$`.
///
/// [pageSize] - Output only. The maximum number of feedback reports to
/// return. The service may return fewer than this value. The valid range is
/// \[1-100\]; If unspecified (0), at most 25 feedback reports are returned.
/// Values above 100 are coerced to 100.
///
/// [pageToken] - Output only. A page token, received from a previous
/// `ListFeedbackReports` call. Provide this to retrieve the subsequent page.
/// When paginating, all other parameters provided to `ListFeedbackReports`
/// must match the call that provided the page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1ListFeedbackReportsResponse].
///
/// 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<GoogleFirebaseAppdistroV1ListFeedbackReportsResponse> list(
core.String parent, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'pageSize': ?pageSize == null ? null : ['${pageSize}'],
'pageToken': ?pageToken == null ? null : [pageToken],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$parent') + '/feedbackReports';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1ListFeedbackReportsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
class ProjectsAppsReleasesOperationsResource {
final commons.ApiRequester _requester;
ProjectsAppsReleasesOperationsResource(commons.ApiRequester client)
: _requester = client;
/// Starts asynchronous cancellation on a long-running operation.
///
/// The server makes a best effort to cancel the operation, but success is not
/// guaranteed. If the server doesn't support this method, it returns
/// `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation
/// or other methods to check whether the cancellation succeeded or whether
/// the operation completed despite cancellation. On successful cancellation,
/// the operation is not deleted; instead, it becomes an operation with an
/// Operation.error value with a google.rpc.Status.code of `1`, corresponding
/// to `Code.CANCELLED`.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The name of the operation resource to be cancelled.
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+/operations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// 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<GoogleProtobufEmpty> cancel(
GoogleLongrunningCancelOperationRequest request,
core.String name, {
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_ = 'v1/' + core.Uri.encodeFull('$name') + ':cancel';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Deletes a long-running operation.
///
/// This method indicates that the client is no longer interested in the
/// operation result. It does not cancel the operation. If the server doesn't
/// support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.
///
/// Request parameters:
///
/// [name] - The name of the operation resource to be deleted.
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+/operations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// 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<GoogleProtobufEmpty> delete(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'DELETE',
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Gets the latest state of a long-running operation.
///
/// Clients can use this method to poll the operation result at intervals as
/// recommended by the API service.
///
/// Request parameters:
///
/// [name] - The name of the operation resource.
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+/operations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// 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<GoogleLongrunningOperation> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Lists operations that match the specified filter in the request.
///
/// If the server doesn't support this method, it returns `UNIMPLEMENTED`.
///
/// Request parameters:
///
/// [name] - The name of the operation's parent resource.
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+$`.
///
/// [filter] - The standard list filter.
///
/// [pageSize] - The standard list page size.
///
/// [pageToken] - The standard list page token.
///
/// [returnPartialSuccess] - When set to `true`, operations that are reachable
/// are returned as normal, and those that are unreachable are returned in the
/// ListOperationsResponse.unreachable field. This can only be `true` when
/// reading across collections. For example, when `parent` is set to
/// `"projects/example/locations/-"`. This field is not supported by default
/// and will result in an `UNIMPLEMENTED` error if set unless explicitly
/// documented otherwise in service or product specific documentation.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningListOperationsResponse].
///
/// 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<GoogleLongrunningListOperationsResponse> list(
core.String name, {
core.String? filter,
core.int? pageSize,
core.String? pageToken,
core.bool? returnPartialSuccess,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'filter': ?filter == null ? null : [filter],
'pageSize': ?pageSize == null ? null : ['${pageSize}'],
'pageToken': ?pageToken == null ? null : [pageToken],
'returnPartialSuccess': ?returnPartialSuccess == null
? null
: ['${returnPartialSuccess}'],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name') + '/operations';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleLongrunningListOperationsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Waits until the specified long-running operation is done or reaches at
/// most a specified timeout, returning the latest state.
///
/// If the operation is already done, the latest state is immediately
/// returned. If the timeout specified is greater than the default HTTP/RPC
/// timeout, the HTTP/RPC timeout is used. If the server does not support this
/// method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method
/// is on a best-effort basis. It may return the latest state before the
/// specified timeout (including immediately), meaning even an immediate
/// response is no guarantee that the operation is done.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The name of the operation resource to wait on.
/// Value must have pattern
/// `^projects/\[^/\]+/apps/\[^/\]+/releases/\[^/\]+/operations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// 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<GoogleLongrunningOperation> wait(
GoogleLongrunningWaitOperationRequest request,
core.String name, {
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_ = 'v1/' + core.Uri.encodeFull('$name') + ':wait';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
class ProjectsGroupsResource {
final commons.ApiRequester _requester;
ProjectsGroupsResource(commons.ApiRequester client) : _requester = client;
/// Batch adds members to a group.
///
/// The testers will gain access to all releases that the groups have access
/// to.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [group] - Required. The name of the group resource to which testers are
/// added. Format: `projects/{project_number}/groups/{group_alias}`
/// Value must have pattern `^projects/\[^/\]+/groups/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// 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<GoogleProtobufEmpty> batchJoin(
GoogleFirebaseAppdistroV1BatchJoinGroupRequest request,
core.String group, {
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_ = 'v1/' + core.Uri.encodeFull('$group') + ':batchJoin';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Batch removed members from a group.
///
/// The testers will lose access to all releases that the groups have access
/// to.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [group] - Required. The name of the group resource from which testers are
/// removed. Format: `projects/{project_number}/groups/{group_alias}`
/// Value must have pattern `^projects/\[^/\]+/groups/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// 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<GoogleProtobufEmpty> batchLeave(
GoogleFirebaseAppdistroV1BatchLeaveGroupRequest request,
core.String group, {
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_ = 'v1/' + core.Uri.encodeFull('$group') + ':batchLeave';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Create a group.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The name of the project resource, which is the parent
/// of the group resource. Format: `projects/{project_number}`
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [groupId] - Optional. The "alias" to use for the group, which will become
/// the final component of the group's resource name. This value must be
/// unique per project. The field is named `groupId` to comply with AIP
/// guidance for user-specified IDs. This value should be 4-63 characters, and
/// valid characters are `/a-z-/`. If not set, it will be generated based on
/// the display name.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1Group].
///
/// 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<GoogleFirebaseAppdistroV1Group> create(
GoogleFirebaseAppdistroV1Group request,
core.String parent, {
core.String? groupId,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'groupId': ?groupId == null ? null : [groupId],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$parent') + '/groups';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1Group.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Delete a group.
///
/// Request parameters:
///
/// [name] - Required. The name of the group resource. Format:
/// `projects/{project_number}/groups/{group_alias}`
/// Value must have pattern `^projects/\[^/\]+/groups/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// 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<GoogleProtobufEmpty> delete(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'DELETE',
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Get a group.
///
/// Request parameters:
///
/// [name] - Required. The name of the group resource to retrieve. Format:
/// `projects/{project_number}/groups/{group_alias}`
/// Value must have pattern `^projects/\[^/\]+/groups/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1Group].
///
/// 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<GoogleFirebaseAppdistroV1Group> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1Group.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// List groups.
///
/// Request parameters:
///
/// [parent] - Required. The name of the project resource, which is the parent
/// of the group resources. Format: `projects/{project_number}`
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [pageSize] - Optional. The maximum number of groups to return. The service
/// may return fewer than this value. The valid range is \[1-1000\]; If
/// unspecified (0), at most 25 groups are returned. Values above 1000 are
/// coerced to 1000.
///
/// [pageToken] - Optional. A page token, received from a previous
/// `ListGroups` call. Provide this to retrieve the subsequent page. When
/// paginating, all other parameters provided to `ListGroups` must match the
/// call that provided the page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1ListGroupsResponse].
///
/// 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<GoogleFirebaseAppdistroV1ListGroupsResponse> list(
core.String parent, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'pageSize': ?pageSize == null ? null : ['${pageSize}'],
'pageToken': ?pageToken == null ? null : [pageToken],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$parent') + '/groups';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1ListGroupsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Update a group.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The name of the group resource. Format:
/// `projects/{project_number}/groups/{group_alias}`
/// Value must have pattern `^projects/\[^/\]+/groups/\[^/\]+$`.
///
/// [updateMask] - Optional. The list of fields to update.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1Group].
///
/// 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<GoogleFirebaseAppdistroV1Group> patch(
GoogleFirebaseAppdistroV1Group request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'updateMask': ?updateMask == null ? null : [updateMask],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1Group.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
class ProjectsTestersResource {
final commons.ApiRequester _requester;
ProjectsTestersResource(commons.ApiRequester client) : _requester = client;
/// Batch adds testers.
///
/// This call adds testers for the specified emails if they don't already
/// exist. Returns all testers specified in the request, including newly
/// created and previously existing testers. This action is idempotent.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [project] - Required. The name of the project resource. Format:
/// `projects/{project_number}`
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1BatchAddTestersResponse].
///
/// 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<GoogleFirebaseAppdistroV1BatchAddTestersResponse> batchAdd(
GoogleFirebaseAppdistroV1BatchAddTestersRequest request,
core.String project, {
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_ = 'v1/' + core.Uri.encodeFull('$project') + '/testers:batchAdd';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1BatchAddTestersResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Batch removes testers.
///
/// If found, this call deletes testers for the specified emails. Returns all
/// deleted testers.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [project] - Required. The name of the project resource. Format:
/// `projects/{project_number}`
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1BatchRemoveTestersResponse].
///
/// 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<GoogleFirebaseAppdistroV1BatchRemoveTestersResponse> batchRemove(
GoogleFirebaseAppdistroV1BatchRemoveTestersRequest request,
core.String project, {
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_ =
'v1/' + core.Uri.encodeFull('$project') + '/testers:batchRemove';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1BatchRemoveTestersResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Lists testers and their resource ids.
///
/// Request parameters:
///
/// [parent] - Required. The name of the project resource, which is the parent
/// of the tester resources. Format: `projects/{project_number}`
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [filter] - Optional. The expression to filter testers listed in the
/// response. To learn more about filtering, refer to \[Google's AIP-160
/// standard\](http://aip.dev/160). Supported fields: - `name` - `displayName`
/// - `groups` Example: - `name = "projects/-/testers / * @example.com"` -
/// `displayName = "Joe Sixpack"` - `groups = "projects / * /groups/qa-team"`
///
/// [pageSize] - Optional. The maximum number of testers to return. The
/// service may return fewer than this value. The valid range is \[1-1000\];
/// If unspecified (0), at most 10 testers are returned. Values above 1000 are
/// coerced to 1000.
///
/// [pageToken] - Optional. A page token, received from a previous
/// `ListTesters` call. Provide this to retrieve the subsequent page. When
/// paginating, all other parameters provided to `ListTesters` must match the
/// call that provided the page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1ListTestersResponse].
///
/// 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<GoogleFirebaseAppdistroV1ListTestersResponse> list(
core.String parent, {
core.String? filter,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'filter': ?filter == null ? null : [filter],
'pageSize': ?pageSize == null ? null : ['${pageSize}'],
'pageToken': ?pageToken == null ? null : [pageToken],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$parent') + '/testers';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1ListTestersResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Update a tester.
///
/// If the testers joins a group they gain access to all releases that the
/// group has access to.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - The name of the tester resource. Format:
/// `projects/{project_number}/testers/{email_address}`
/// Value must have pattern `^projects/\[^/\]+/testers/\[^/\]+$`.
///
/// [updateMask] - Optional. The list of fields to update.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleFirebaseAppdistroV1Tester].
///
/// 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<GoogleFirebaseAppdistroV1Tester> patch(
GoogleFirebaseAppdistroV1Tester request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'updateMask': ?updateMask == null ? null : [updateMask],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleFirebaseAppdistroV1Tester.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
/// Information to read/write to blobstore2.
typedef GdataBlobstore2Info = $Blobstore2Info;
/// A sequence of media data references representing composite data.
///
/// Introduced to support Bigstore composite objects. For details, visit
/// http://go/bigstore-composites.
class GdataCompositeMedia {
/// Blobstore v1 reference, set if reference_type is BLOBSTORE_REF This should
/// be the byte representation of a blobstore.BlobRef.
///
/// Since Blobstore is deprecating v1, use blobstore2_info instead. For now,
/// any v2 blob will also be represented in this field as v1 BlobRef.
@core.Deprecated(
'Not supported. Member documentation may have more information.',
)
core.String? blobRef;
core.List<core.int> get blobRefAsBytes => convert.base64.decode(blobRef!);
set blobRefAsBytes(core.List<core.int> bytes_) {
blobRef = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// Blobstore v2 info, set if reference_type is BLOBSTORE_REF and it refers to
/// a v2 blob.
GdataBlobstore2Info? blobstore2Info;
/// A binary data reference for a media download.
///
/// Serves as a technology-agnostic binary reference in some Google
/// infrastructure. This value is a serialized storage_cosmo.BinaryReference
/// proto. Storing it as bytes is a hack to get around the fact that the cosmo
/// proto (as well as others it includes) doesn't support JavaScript. This
/// prevents us from including the actual type of this field.
core.String? cosmoBinaryReference;
core.List<core.int> get cosmoBinaryReferenceAsBytes =>
convert.base64.decode(cosmoBinaryReference!);
set cosmoBinaryReferenceAsBytes(core.List<core.int> bytes_) {
cosmoBinaryReference = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// crc32.c hash for the payload.
core.int? crc32cHash;
/// Media data, set if reference_type is INLINE
core.String? inline;
core.List<core.int> get inlineAsBytes => convert.base64.decode(inline!);
set inlineAsBytes(core.List<core.int> bytes_) {
inline = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// Size of the data, in bytes
core.String? length;
/// MD5 hash for the payload.
core.String? md5Hash;
core.List<core.int> get md5HashAsBytes => convert.base64.decode(md5Hash!);
set md5HashAsBytes(core.List<core.int> bytes_) {
md5Hash = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// Reference to a TI Blob, set if reference_type is BIGSTORE_REF.
GdataObjectId? objectId;
/// Path to the data, set if reference_type is PATH
core.String? path;
/// Describes what the field reference contains.
/// Possible string values are:
/// - "PATH" : Reference contains a GFS path or a local path.
/// - "BLOB_REF" : Reference points to a blobstore object. This could be
/// either a v1 blob_ref or a v2 blobstore2_info. Clients should check
/// blobstore2_info first, since v1 is being deprecated.
/// - "INLINE" : Data is included into this proto buffer
/// - "BIGSTORE_REF" : Reference points to a bigstore object
/// - "COSMO_BINARY_REFERENCE" : Indicates the data is stored in
/// cosmo_binary_reference.
core.String? referenceType;
/// SHA-1 hash for the payload.
core.String? sha1Hash;
core.List<core.int> get sha1HashAsBytes => convert.base64.decode(sha1Hash!);
set sha1HashAsBytes(core.List<core.int> bytes_) {
sha1Hash = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
GdataCompositeMedia({
this.blobRef,
this.blobstore2Info,
this.cosmoBinaryReference,
this.crc32cHash,
this.inline,
this.length,
this.md5Hash,
this.objectId,
this.path,
this.referenceType,
this.sha1Hash,
});
GdataCompositeMedia.fromJson(core.Map json_)
: this(
blobRef: json_['blobRef'] as core.String?,
blobstore2Info: json_.containsKey('blobstore2Info')
? GdataBlobstore2Info.fromJson(
json_['blobstore2Info'] as core.Map<core.String, core.dynamic>,
)
: null,
cosmoBinaryReference: json_['cosmoBinaryReference'] as core.String?,
crc32cHash: json_['crc32cHash'] as core.int?,
inline: json_['inline'] as core.String?,
length: json_['length'] as core.String?,
md5Hash: json_['md5Hash'] as core.String?,
objectId: json_.containsKey('objectId')
? GdataObjectId.fromJson(
json_['objectId'] as core.Map<core.String, core.dynamic>,
)
: null,
path: json_['path'] as core.String?,
referenceType: json_['referenceType'] as core.String?,
sha1Hash: json_['sha1Hash'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final blobRef = this.blobRef;
final blobstore2Info = this.blobstore2Info;
final cosmoBinaryReference = this.cosmoBinaryReference;
final crc32cHash = this.crc32cHash;
final inline = this.inline;
final length = this.length;
final md5Hash = this.md5Hash;
final objectId = this.objectId;
final path = this.path;
final referenceType = this.referenceType;
final sha1Hash = this.sha1Hash;
return {
'blobRef': ?blobRef,
'blobstore2Info': ?blobstore2Info,
'cosmoBinaryReference': ?cosmoBinaryReference,
'crc32cHash': ?crc32cHash,
'inline': ?inline,
'length': ?length,
'md5Hash': ?md5Hash,
'objectId': ?objectId,
'path': ?path,
'referenceType': ?referenceType,
'sha1Hash': ?sha1Hash,
};
}
}
/// Detailed Content-Type information from Scotty.
///
/// The Content-Type of the media will typically be filled in by the header or
/// Scotty's best_guess, but this extended information provides the backend with
/// more information so that it can make a better decision if needed. This is
/// only used on media upload requests from Scotty.
typedef GdataContentTypeInfo = $ContentTypeInfo;
/// Backend response for a Diff get checksums response.
///
/// For details on the Scotty Diff protocol, visit
/// http://go/scotty-diff-protocol.
class GdataDiffChecksumsResponse {
/// Exactly one of these fields must be populated.
///
/// If checksums_location is filled, the server will return the corresponding
/// contents to the user. If object_location is filled, the server will
/// calculate the checksums based on the content there and return that to the
/// user. For details on the format of the checksums, see
/// http://go/scotty-diff-protocol.
GdataCompositeMedia? checksumsLocation;
/// The chunk size of checksums.
///
/// Must be a multiple of 256KB.
core.String? chunkSizeBytes;
/// If set, calculate the checksums based on the contents and return them to
/// the caller.
GdataCompositeMedia? objectLocation;
/// The total size of the server object.
core.String? objectSizeBytes;
/// The object version of the object the checksums are being returned for.
core.String? objectVersion;
GdataDiffChecksumsResponse({
this.checksumsLocation,
this.chunkSizeBytes,
this.objectLocation,
this.objectSizeBytes,
this.objectVersion,
});
GdataDiffChecksumsResponse.fromJson(core.Map json_)
: this(
checksumsLocation: json_.containsKey('checksumsLocation')
? GdataCompositeMedia.fromJson(
json_['checksumsLocation']
as core.Map<core.String, core.dynamic>,
)
: null,
chunkSizeBytes: json_['chunkSizeBytes'] as core.String?,
objectLocation: json_.containsKey('objectLocation')
? GdataCompositeMedia.fromJson(
json_['objectLocation'] as core.Map<core.String, core.dynamic>,
)
: null,
objectSizeBytes: json_['objectSizeBytes'] as core.String?,
objectVersion: json_['objectVersion'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final checksumsLocation = this.checksumsLocation;
final chunkSizeBytes = this.chunkSizeBytes;
final objectLocation = this.objectLocation;
final objectSizeBytes = this.objectSizeBytes;
final objectVersion = this.objectVersion;
return {
'checksumsLocation': ?checksumsLocation,
'chunkSizeBytes': ?chunkSizeBytes,
'objectLocation': ?objectLocation,
'objectSizeBytes': ?objectSizeBytes,
'objectVersion': ?objectVersion,
};
}
}
/// Backend response for a Diff download response.
///
/// For details on the Scotty Diff protocol, visit
/// http://go/scotty-diff-protocol.
class GdataDiffDownloadResponse {
/// The original object location.
GdataCompositeMedia? objectLocation;
GdataDiffDownloadResponse({this.objectLocation});
GdataDiffDownloadResponse.fromJson(core.Map json_)
: this(
objectLocation: json_.containsKey('objectLocation')
? GdataCompositeMedia.fromJson(
json_['objectLocation'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final objectLocation = this.objectLocation;
return {'objectLocation': ?objectLocation};
}
}
/// A Diff upload request.
///
/// For details on the Scotty Diff protocol, visit
/// http://go/scotty-diff-protocol.
class GdataDiffUploadRequest {
/// The location of the checksums for the new object.
///
/// Agents must clone the object located here, as the upload server will
/// delete the contents once a response is received. For details on the format
/// of the checksums, see http://go/scotty-diff-protocol.
GdataCompositeMedia? checksumsInfo;
/// The location of the new object.
///
/// Agents must clone the object located here, as the upload server will
/// delete the contents once a response is received.
GdataCompositeMedia? objectInfo;
/// The object version of the object that is the base version the incoming
/// diff script will be applied to.
///
/// This field will always be filled in.
core.String? objectVersion;
GdataDiffUploadRequest({
this.checksumsInfo,
this.objectInfo,
this.objectVersion,
});
GdataDiffUploadRequest.fromJson(core.Map json_)
: this(
checksumsInfo: json_.containsKey('checksumsInfo')
? GdataCompositeMedia.fromJson(
json_['checksumsInfo'] as core.Map<core.String, core.dynamic>,
)
: null,
objectInfo: json_.containsKey('objectInfo')
? GdataCompositeMedia.fromJson(
json_['objectInfo'] as core.Map<core.String, core.dynamic>,
)
: null,
objectVersion: json_['objectVersion'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final checksumsInfo = this.checksumsInfo;
final objectInfo = this.objectInfo;
final objectVersion = this.objectVersion;
return {
'checksumsInfo': ?checksumsInfo,
'objectInfo': ?objectInfo,
'objectVersion': ?objectVersion,
};
}
}
/// Backend response for a Diff upload request.
///
/// For details on the Scotty Diff protocol, visit
/// http://go/scotty-diff-protocol.
class GdataDiffUploadResponse {
/// The object version of the object at the server.
///
/// Must be included in the end notification response. The version in the end
/// notification response must correspond to the new version of the object
/// that is now stored at the server, after the upload.
core.String? objectVersion;
/// The location of the original file for a diff upload request.
///
/// Must be filled in if responding to an upload start notification.
GdataCompositeMedia? originalObject;
GdataDiffUploadResponse({this.objectVersion, this.originalObject});
GdataDiffUploadResponse.fromJson(core.Map json_)
: this(
objectVersion: json_['objectVersion'] as core.String?,
originalObject: json_.containsKey('originalObject')
? GdataCompositeMedia.fromJson(
json_['originalObject'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final objectVersion = this.objectVersion;
final originalObject = this.originalObject;
return {'objectVersion': ?objectVersion, 'originalObject': ?originalObject};
}
}
/// Backend response for a Diff get version response.
///
/// For details on the Scotty Diff protocol, visit
/// http://go/scotty-diff-protocol.
typedef GdataDiffVersionResponse = $DiffVersionResponse;
/// Parameters specific to media downloads.
typedef GdataDownloadParameters = $DownloadParameters;
/// A reference to data stored on the filesystem, on GFS or in blobstore.
class GdataMedia {
/// Deprecated, use one of explicit hash type fields instead.
///
/// Algorithm used for calculating the hash. As of 2011/01/21, "MD5" is the
/// only possible value for this field. New values may be added at any time.
@core.Deprecated(
'Not supported. Member documentation may have more information.',
)
core.String? algorithm;
/// Use object_id instead.
@core.Deprecated(
'Not supported. Member documentation may have more information.',
)
core.String? bigstoreObjectRef;
core.List<core.int> get bigstoreObjectRefAsBytes =>
convert.base64.decode(bigstoreObjectRef!);
set bigstoreObjectRefAsBytes(core.List<core.int> bytes_) {
bigstoreObjectRef = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// Blobstore v1 reference, set if reference_type is BLOBSTORE_REF This should
/// be the byte representation of a blobstore.BlobRef.
///
/// Since Blobstore is deprecating v1, use blobstore2_info instead. For now,
/// any v2 blob will also be represented in this field as v1 BlobRef.
@core.Deprecated(
'Not supported. Member documentation may have more information.',
)
core.String? blobRef;
core.List<core.int> get blobRefAsBytes => convert.base64.decode(blobRef!);
set blobRefAsBytes(core.List<core.int> bytes_) {
blobRef = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// Blobstore v2 info, set if reference_type is BLOBSTORE_REF and it refers to
/// a v2 blob.
GdataBlobstore2Info? blobstore2Info;
/// A composite media composed of one or more media objects, set if
/// reference_type is COMPOSITE_MEDIA.
///
/// The media length field must be set to the sum of the lengths of all
/// composite media objects. Note: All composite media must have length
/// specified.
core.List<GdataCompositeMedia>? compositeMedia;
/// MIME type of the data
core.String? contentType;
/// Extended content type information provided for Scotty uploads.
GdataContentTypeInfo? contentTypeInfo;
/// A binary data reference for a media download.
///
/// Serves as a technology-agnostic binary reference in some Google
/// infrastructure. This value is a serialized storage_cosmo.BinaryReference
/// proto. Storing it as bytes is a hack to get around the fact that the cosmo
/// proto (as well as others it includes) doesn't support JavaScript. This
/// prevents us from including the actual type of this field.
core.String? cosmoBinaryReference;
core.List<core.int> get cosmoBinaryReferenceAsBytes =>
convert.base64.decode(cosmoBinaryReference!);
set cosmoBinaryReferenceAsBytes(core.List<core.int> bytes_) {
cosmoBinaryReference = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// For Scotty Uploads: Scotty-provided hashes for uploads For Scotty
/// Downloads: (WARNING: DO NOT USE WITHOUT PERMISSION FROM THE SCOTTY TEAM.)
/// A Hash provided by the agent to be used to verify the data being
/// downloaded.
///
/// Currently only supported for inline payloads. Further, only crc32c_hash is
/// currently supported.
core.int? crc32cHash;
/// Set if reference_type is DIFF_CHECKSUMS_RESPONSE.
GdataDiffChecksumsResponse? diffChecksumsResponse;
/// Set if reference_type is DIFF_DOWNLOAD_RESPONSE.
GdataDiffDownloadResponse? diffDownloadResponse;
/// Set if reference_type is DIFF_UPLOAD_REQUEST.
GdataDiffUploadRequest? diffUploadRequest;
/// Set if reference_type is DIFF_UPLOAD_RESPONSE.
GdataDiffUploadResponse? diffUploadResponse;
/// Set if reference_type is DIFF_VERSION_RESPONSE.
GdataDiffVersionResponse? diffVersionResponse;
/// Parameters for a media download.
GdataDownloadParameters? downloadParameters;
/// Original file name
core.String? filename;
/// Deprecated, use one of explicit hash type fields instead.
///
/// These two hash related fields will only be populated on Scotty based media
/// uploads and will contain the content of the hash group in the
/// NotificationRequest:
/// http://cs/#google3/blobstore2/api/scotty/service/proto/upload_listener.proto&q=class:Hash
/// Hex encoded hash value of the uploaded media.
@core.Deprecated(
'Not supported. Member documentation may have more information.',
)
core.String? hash;
/// For Scotty uploads only.
///
/// If a user sends a hash code and the backend has requested that Scotty
/// verify the upload against the client hash, Scotty will perform the check
/// on behalf of the backend and will reject it if the hashes don't match.
/// This is set to true if Scotty performed this verification.
core.bool? hashVerified;
/// Media data, set if reference_type is INLINE
core.String? inline;
core.List<core.int> get inlineAsBytes => convert.base64.decode(inline!);
set inlineAsBytes(core.List<core.int> bytes_) {
inline = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// |is_potential_retry| is set false only when Scotty is certain that it has
/// not sent the request before.
///
/// When a client resumes an upload, this field must be set true in agent
/// calls, because Scotty cannot be certain that it has never sent the request
/// before due to potential failure in the session state persistence.
core.bool? isPotentialRetry;
/// Size of the data, in bytes
core.String? length;
/// Scotty-provided MD5 hash for an upload.
core.String? md5Hash;
core.List<core.int> get md5HashAsBytes => convert.base64.decode(md5Hash!);
set md5HashAsBytes(core.List<core.int> bytes_) {
md5Hash = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// Media id to forward to the operation GetMedia.
///
/// Can be set if reference_type is GET_MEDIA.
core.String? mediaId;
core.List<core.int> get mediaIdAsBytes => convert.base64.decode(mediaId!);
set mediaIdAsBytes(core.List<core.int> bytes_) {
mediaId = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// Reference to a TI Blob, set if reference_type is BIGSTORE_REF.
GdataObjectId? objectId;
/// Path to the data, set if reference_type is PATH
core.String? path;
/// Describes what the field reference contains.
/// Possible string values are:
/// - "PATH" : Reference contains a GFS path or a local path.
/// - "BLOB_REF" : Reference points to a blobstore object. This could be
/// either a v1 blob_ref or a v2 blobstore2_info. Clients should check
/// blobstore2_info first, since v1 is being deprecated.
/// - "INLINE" : Data is included into this proto buffer
/// - "GET_MEDIA" : Data should be accessed from the current service using the
/// operation GetMedia.
/// - "COMPOSITE_MEDIA" : The content for this media object is stored across
/// multiple partial media objects under the composite_media field.
/// - "BIGSTORE_REF" : Reference points to a bigstore object
/// - "DIFF_VERSION_RESPONSE" : Indicates the data is stored in
/// diff_version_response.
/// - "DIFF_CHECKSUMS_RESPONSE" : Indicates the data is stored in
/// diff_checksums_response.
/// - "DIFF_DOWNLOAD_RESPONSE" : Indicates the data is stored in
/// diff_download_response.
/// - "DIFF_UPLOAD_REQUEST" : Indicates the data is stored in
/// diff_upload_request.
/// - "DIFF_UPLOAD_RESPONSE" : Indicates the data is stored in
/// diff_upload_response.
/// - "COSMO_BINARY_REFERENCE" : Indicates the data is stored in
/// cosmo_binary_reference.
/// - "ARBITRARY_BYTES" : Informs Scotty to generate a response payload with
/// the size specified in the length field. The contents of the payload are
/// generated by Scotty and are undefined. This is useful for testing download
/// speeds between the user and Scotty without involving a real payload
/// source. Note: range is not supported when using arbitrary_bytes.
core.String? referenceType;
/// Scotty-provided SHA1 hash for an upload.
core.String? sha1Hash;
core.List<core.int> get sha1HashAsBytes => convert.base64.decode(sha1Hash!);
set sha1HashAsBytes(core.List<core.int> bytes_) {
sha1Hash = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// Scotty-provided SHA256 hash for an upload.
core.String? sha256Hash;
core.List<core.int> get sha256HashAsBytes =>
convert.base64.decode(sha256Hash!);
set sha256HashAsBytes(core.List<core.int> bytes_) {
sha256Hash = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// Time at which the media data was last updated, in milliseconds since UNIX
/// epoch
core.String? timestamp;
/// A unique fingerprint/version id for the media data
core.String? token;
GdataMedia({
this.algorithm,
this.bigstoreObjectRef,
this.blobRef,
this.blobstore2Info,
this.compositeMedia,
this.contentType,
this.contentTypeInfo,
this.cosmoBinaryReference,
this.crc32cHash,
this.diffChecksumsResponse,
this.diffDownloadResponse,
this.diffUploadRequest,
this.diffUploadResponse,
this.diffVersionResponse,
this.downloadParameters,
this.filename,
this.hash,
this.hashVerified,
this.inline,
this.isPotentialRetry,
this.length,
this.md5Hash,
this.mediaId,
this.objectId,
this.path,
this.referenceType,
this.sha1Hash,
this.sha256Hash,
this.timestamp,
this.token,
});
GdataMedia.fromJson(core.Map json_)
: this(
algorithm: json_['algorithm'] as core.String?,
bigstoreObjectRef: json_['bigstoreObjectRef'] as core.String?,
blobRef: json_['blobRef'] as core.String?,
blobstore2Info: json_.containsKey('blobstore2Info')
? GdataBlobstore2Info.fromJson(
json_['blobstore2Info'] as core.Map<core.String, core.dynamic>,
)
: null,
compositeMedia: (json_['compositeMedia'] as core.List?)
?.map(
(value) => GdataCompositeMedia.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
contentType: json_['contentType'] as core.String?,
contentTypeInfo: json_.containsKey('contentTypeInfo')
? GdataContentTypeInfo.fromJson(
json_['contentTypeInfo'] as core.Map<core.String, core.dynamic>,
)
: null,
cosmoBinaryReference: json_['cosmoBinaryReference'] as core.String?,
crc32cHash: json_['crc32cHash'] as core.int?,
diffChecksumsResponse: json_.containsKey('diffChecksumsResponse')
? GdataDiffChecksumsResponse.fromJson(
json_['diffChecksumsResponse']
as core.Map<core.String, core.dynamic>,
)
: null,
diffDownloadResponse: json_.containsKey('diffDownloadResponse')
? GdataDiffDownloadResponse.fromJson(
json_['diffDownloadResponse']
as core.Map<core.String, core.dynamic>,
)
: null,
diffUploadRequest: json_.containsKey('diffUploadRequest')
? GdataDiffUploadRequest.fromJson(
json_['diffUploadRequest']
as core.Map<core.String, core.dynamic>,
)
: null,
diffUploadResponse: json_.containsKey('diffUploadResponse')
? GdataDiffUploadResponse.fromJson(
json_['diffUploadResponse']
as core.Map<core.String, core.dynamic>,
)
: null,
diffVersionResponse: json_.containsKey('diffVersionResponse')
? GdataDiffVersionResponse.fromJson(
json_['diffVersionResponse']
as core.Map<core.String, core.dynamic>,
)
: null,
downloadParameters: json_.containsKey('downloadParameters')
? GdataDownloadParameters.fromJson(
json_['downloadParameters']
as core.Map<core.String, core.dynamic>,
)
: null,
filename: json_['filename'] as core.String?,
hash: json_['hash'] as core.String?,
hashVerified: json_['hashVerified'] as core.bool?,
inline: json_['inline'] as core.String?,
isPotentialRetry: json_['isPotentialRetry'] as core.bool?,
length: json_['length'] as core.String?,
md5Hash: json_['md5Hash'] as core.String?,
mediaId: json_['mediaId'] as core.String?,
objectId: json_.containsKey('objectId')
? GdataObjectId.fromJson(
json_['objectId'] as core.Map<core.String, core.dynamic>,
)
: null,
path: json_['path'] as core.String?,
referenceType: json_['referenceType'] as core.String?,
sha1Hash: json_['sha1Hash'] as core.String?,
sha256Hash: json_['sha256Hash'] as core.String?,
timestamp: json_['timestamp'] as core.String?,
token: json_['token'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final algorithm = this.algorithm;
final bigstoreObjectRef = this.bigstoreObjectRef;
final blobRef = this.blobRef;
final blobstore2Info = this.blobstore2Info;
final compositeMedia = this.compositeMedia;
final contentType = this.contentType;
final contentTypeInfo = this.contentTypeInfo;
final cosmoBinaryReference = this.cosmoBinaryReference;
final crc32cHash = this.crc32cHash;
final diffChecksumsResponse = this.diffChecksumsResponse;
final diffDownloadResponse = this.diffDownloadResponse;
final diffUploadRequest = this.diffUploadRequest;
final diffUploadResponse = this.diffUploadResponse;
final diffVersionResponse = this.diffVersionResponse;
final downloadParameters = this.downloadParameters;
final filename = this.filename;
final hash = this.hash;
final hashVerified = this.hashVerified;
final inline = this.inline;
final isPotentialRetry = this.isPotentialRetry;
final length = this.length;
final md5Hash = this.md5Hash;
final mediaId = this.mediaId;
final objectId = this.objectId;
final path = this.path;
final referenceType = this.referenceType;
final sha1Hash = this.sha1Hash;
final sha256Hash = this.sha256Hash;
final timestamp = this.timestamp;
final token = this.token;
return {
'algorithm': ?algorithm,
'bigstoreObjectRef': ?bigstoreObjectRef,
'blobRef': ?blobRef,
'blobstore2Info': ?blobstore2Info,
'compositeMedia': ?compositeMedia,
'contentType': ?contentType,
'contentTypeInfo': ?contentTypeInfo,
'cosmoBinaryReference': ?cosmoBinaryReference,
'crc32cHash': ?crc32cHash,
'diffChecksumsResponse': ?diffChecksumsResponse,
'diffDownloadResponse': ?diffDownloadResponse,
'diffUploadRequest': ?diffUploadRequest,
'diffUploadResponse': ?diffUploadResponse,
'diffVersionResponse': ?diffVersionResponse,
'downloadParameters': ?downloadParameters,
'filename': ?filename,
'hash': ?hash,
'hashVerified': ?hashVerified,
'inline': ?inline,
'isPotentialRetry': ?isPotentialRetry,
'length': ?length,
'md5Hash': ?md5Hash,
'mediaId': ?mediaId,
'objectId': ?objectId,
'path': ?path,
'referenceType': ?referenceType,
'sha1Hash': ?sha1Hash,
'sha256Hash': ?sha256Hash,
'timestamp': ?timestamp,
'token': ?token,
};
}
}
/// This is a copy of the tech.blob.ObjectId proto, which could not be used
/// directly here due to transitive closure issues with JavaScript support; see
/// http://b/8801763.
typedef GdataObjectId = $ObjectId;
/// Android App Bundle (AAB) information for a Firebase app.
class GoogleFirebaseAppdistroV1AabInfo {
/// App bundle integration state.
///
/// Only valid for android apps.
/// Possible string values are:
/// - "AAB_INTEGRATION_STATE_UNSPECIFIED" : Aab integration state unspecified
/// - "INTEGRATED" : App can receive app bundle uploads
/// - "PLAY_ACCOUNT_NOT_LINKED" : Firebase project is not linked to a Play
/// developer account
/// - "NO_APP_WITH_GIVEN_BUNDLE_ID_IN_PLAY_ACCOUNT" : There is no app in
/// linked Play developer account with the same bundle id
/// - "APP_NOT_PUBLISHED" : The app in Play developer account is not in a
/// published state
/// - "AAB_STATE_UNAVAILABLE" : Play App status is unavailable
/// - "PLAY_IAS_TERMS_NOT_ACCEPTED" : Play IAS terms not accepted
core.String? integrationState;
/// The name of the `AabInfo` resource.
///
/// Format: `projects/{project_number}/apps/{app}/aabInfo`
core.String? name;
/// App bundle test certificate generated for the app.
///
/// Set after the first app bundle is uploaded for this app.
GoogleFirebaseAppdistroV1TestCertificate? testCertificate;
GoogleFirebaseAppdistroV1AabInfo({
this.integrationState,
this.name,
this.testCertificate,
});
GoogleFirebaseAppdistroV1AabInfo.fromJson(core.Map json_)
: this(
integrationState: json_['integrationState'] as core.String?,
name: json_['name'] as core.String?,
testCertificate: json_.containsKey('testCertificate')
? GoogleFirebaseAppdistroV1TestCertificate.fromJson(
json_['testCertificate'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final integrationState = this.integrationState;
final name = this.name;
final testCertificate = this.testCertificate;
return {
'integrationState': ?integrationState,
'name': ?name,
'testCertificate': ?testCertificate,
};
}
}
/// The Request message for batch adding testers
class GoogleFirebaseAppdistroV1BatchAddTestersRequest {
/// The email addresses of the tester resources to create.
///
/// A maximum of 999 and a minimum of 1 tester can be created in a batch.
///
/// Required.
core.List<core.String>? emails;
GoogleFirebaseAppdistroV1BatchAddTestersRequest({this.emails});
GoogleFirebaseAppdistroV1BatchAddTestersRequest.fromJson(core.Map json_)
: this(
emails: (json_['emails'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final emails = this.emails;
return {'emails': ?emails};
}
}
/// The Response message for `BatchAddTesters`.
class GoogleFirebaseAppdistroV1BatchAddTestersResponse {
/// The testers which are created and/or already exist
core.List<GoogleFirebaseAppdistroV1Tester>? testers;
GoogleFirebaseAppdistroV1BatchAddTestersResponse({this.testers});
GoogleFirebaseAppdistroV1BatchAddTestersResponse.fromJson(core.Map json_)
: this(
testers: (json_['testers'] as core.List?)
?.map(
(value) => GoogleFirebaseAppdistroV1Tester.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final testers = this.testers;
return {'testers': ?testers};
}
}
/// The request message for `BatchDeleteReleases`.
class GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest {
/// The names of the release resources to delete.
///
/// Format: `projects/{project_number}/apps/{app}/releases/{release}` A
/// maximum of 100 releases can be deleted per request.
///
/// Required.
core.List<core.String>? names;
GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest({this.names});
GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest.fromJson(core.Map json_)
: this(
names: (json_['names'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final names = this.names;
return {'names': ?names};
}
}
/// The request message for `BatchJoinGroup`
class GoogleFirebaseAppdistroV1BatchJoinGroupRequest {
/// Indicates whether to create tester resources based on `emails` if they
/// don't exist yet.
core.bool? createMissingTesters;
/// The emails of the testers to be added to the group.
///
/// A maximum of 999 and a minimum of 1 tester can be created in a batch.
///
/// Required.
core.List<core.String>? emails;
GoogleFirebaseAppdistroV1BatchJoinGroupRequest({
this.createMissingTesters,
this.emails,
});
GoogleFirebaseAppdistroV1BatchJoinGroupRequest.fromJson(core.Map json_)
: this(
createMissingTesters: json_['createMissingTesters'] as core.bool?,
emails: (json_['emails'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final createMissingTesters = this.createMissingTesters;
final emails = this.emails;
return {'createMissingTesters': ?createMissingTesters, 'emails': ?emails};
}
}
/// Request message for `BatchLeaveGroup`
class GoogleFirebaseAppdistroV1BatchLeaveGroupRequest {
/// The email addresses of the testers to be removed from the group.
///
/// A maximum of 999 and a minimum of 1 testers can be removed in a batch.
///
/// Required.
core.List<core.String>? emails;
GoogleFirebaseAppdistroV1BatchLeaveGroupRequest({this.emails});
GoogleFirebaseAppdistroV1BatchLeaveGroupRequest.fromJson(core.Map json_)
: this(
emails: (json_['emails'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final emails = this.emails;
return {'emails': ?emails};
}
}
/// The request message for `BatchRemoveTesters`.
class GoogleFirebaseAppdistroV1BatchRemoveTestersRequest {
/// The email addresses of the tester resources to removed.
///
/// A maximum of 999 and a minimum of 1 testers can be deleted in a batch.
///
/// Required.
core.List<core.String>? emails;
GoogleFirebaseAppdistroV1BatchRemoveTestersRequest({this.emails});
GoogleFirebaseAppdistroV1BatchRemoveTestersRequest.fromJson(core.Map json_)
: this(
emails: (json_['emails'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final emails = this.emails;
return {'emails': ?emails};
}
}
/// The response message for `BatchRemoveTesters`
class GoogleFirebaseAppdistroV1BatchRemoveTestersResponse {
/// List of deleted tester emails
core.List<core.String>? emails;
GoogleFirebaseAppdistroV1BatchRemoveTestersResponse({this.emails});
GoogleFirebaseAppdistroV1BatchRemoveTestersResponse.fromJson(core.Map json_)
: this(
emails: (json_['emails'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final emails = this.emails;
return {'emails': ?emails};
}
}
/// The request message for `DistributeRelease`.
class GoogleFirebaseAppdistroV1DistributeReleaseRequest {
/// A list of group aliases (IDs) to be given access to this release.
///
/// A combined maximum of 999 `testerEmails` and `groupAliases` can be
/// specified in a single request.
///
/// Optional.
core.List<core.String>? groupAliases;
/// A list of tester email addresses to be given access to this release.
///
/// A combined maximum of 999 `testerEmails` and `groupAliases` can be
/// specified in a single request.
///
/// Optional.
core.List<core.String>? testerEmails;
GoogleFirebaseAppdistroV1DistributeReleaseRequest({
this.groupAliases,
this.testerEmails,
});
GoogleFirebaseAppdistroV1DistributeReleaseRequest.fromJson(core.Map json_)
: this(
groupAliases: (json_['groupAliases'] as core.List?)
?.map((value) => value as core.String)
.toList(),
testerEmails: (json_['testerEmails'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final groupAliases = this.groupAliases;
final testerEmails = this.testerEmails;
return {'groupAliases': ?groupAliases, 'testerEmails': ?testerEmails};
}
}
/// The response message for `DistributeRelease`.
typedef GoogleFirebaseAppdistroV1DistributeReleaseResponse = $Empty;
/// A feedback report submitted by a tester for a release.
class GoogleFirebaseAppdistroV1FeedbackReport {
/// The time when the feedback report was created.
///
/// Output only.
core.String? createTime;
/// A link to the Firebase console displaying the feedback report.
///
/// Output only.
core.String? firebaseConsoleUri;
/// The name of the feedback report resource.
///
/// Format:
/// `projects/{project_number}/apps/{app}/releases/{release}/feedbackReports/{feedback_report}`
core.String? name;
/// A signed link (which expires in one hour) that lets you directly download
/// the screenshot.
///
/// Output only.
core.String? screenshotUri;
/// The resource name of the tester who submitted the feedback report.
///
/// Output only.
core.String? tester;
/// The text of the feedback report.
///
/// Output only.
core.String? text;
GoogleFirebaseAppdistroV1FeedbackReport({
this.createTime,
this.firebaseConsoleUri,
this.name,
this.screenshotUri,
this.tester,
this.text,
});
GoogleFirebaseAppdistroV1FeedbackReport.fromJson(core.Map json_)
: this(
createTime: json_['createTime'] as core.String?,
firebaseConsoleUri: json_['firebaseConsoleUri'] as core.String?,
name: json_['name'] as core.String?,
screenshotUri: json_['screenshotUri'] as core.String?,
tester: json_['tester'] as core.String?,
text: json_['text'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final createTime = this.createTime;
final firebaseConsoleUri = this.firebaseConsoleUri;
final name = this.name;
final screenshotUri = this.screenshotUri;
final tester = this.tester;
final text = this.text;
return {
'createTime': ?createTime,
'firebaseConsoleUri': ?firebaseConsoleUri,
'name': ?name,
'screenshotUri': ?screenshotUri,
'tester': ?tester,
'text': ?text,
};
}
}
/// A group which can contain testers.
///
/// A group can be invited to test apps in a Firebase project.
class GoogleFirebaseAppdistroV1Group {
/// The display name of the group.
///
/// Required.
core.String? displayName;
/// The number of invite links for this group.
///
/// Output only.
core.int? inviteLinkCount;
/// The name of the group resource.
///
/// Format: `projects/{project_number}/groups/{group_alias}`
core.String? name;
/// The number of releases this group is permitted to access.
///
/// Output only.
core.int? releaseCount;
/// The number of testers who are members of this group.
///
/// Output only.
core.int? testerCount;
GoogleFirebaseAppdistroV1Group({
this.displayName,
this.inviteLinkCount,
this.name,
this.releaseCount,
this.testerCount,
});
GoogleFirebaseAppdistroV1Group.fromJson(core.Map json_)
: this(
displayName: json_['displayName'] as core.String?,
inviteLinkCount: json_['inviteLinkCount'] as core.int?,
name: json_['name'] as core.String?,
releaseCount: json_['releaseCount'] as core.int?,
testerCount: json_['testerCount'] as core.int?,
);
core.Map<core.String, core.dynamic> toJson() {
final displayName = this.displayName;
final inviteLinkCount = this.inviteLinkCount;
final name = this.name;
final releaseCount = this.releaseCount;
final testerCount = this.testerCount;
return {
'displayName': ?displayName,
'inviteLinkCount': ?inviteLinkCount,
'name': ?name,
'releaseCount': ?releaseCount,
'testerCount': ?testerCount,
};
}
}
/// The response message for `ListFeedbackReports`.
class GoogleFirebaseAppdistroV1ListFeedbackReportsResponse {
/// The feedback reports
core.List<GoogleFirebaseAppdistroV1FeedbackReport>? feedbackReports;
/// A short-lived token, which can be sent as `pageToken` to retrieve the next
/// page.
///
/// If this field is omitted, there are no subsequent pages.
core.String? nextPageToken;
GoogleFirebaseAppdistroV1ListFeedbackReportsResponse({
this.feedbackReports,
this.nextPageToken,
});
GoogleFirebaseAppdistroV1ListFeedbackReportsResponse.fromJson(core.Map json_)
: this(
feedbackReports: (json_['feedbackReports'] as core.List?)
?.map(
(value) => GoogleFirebaseAppdistroV1FeedbackReport.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
nextPageToken: json_['nextPageToken'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final feedbackReports = this.feedbackReports;
final nextPageToken = this.nextPageToken;
return {
'feedbackReports': ?feedbackReports,
'nextPageToken': ?nextPageToken,
};
}
}
/// The response message for `ListGroups`.
class GoogleFirebaseAppdistroV1ListGroupsResponse {
/// The groups listed.
core.List<GoogleFirebaseAppdistroV1Group>? groups;
/// A short-lived token, which can be sent as `pageToken` to retrieve the next
/// page.
///
/// If this field is omitted, there are no subsequent pages.
core.String? nextPageToken;
GoogleFirebaseAppdistroV1ListGroupsResponse({
this.groups,
this.nextPageToken,
});
GoogleFirebaseAppdistroV1ListGroupsResponse.fromJson(core.Map json_)
: this(
groups: (json_['groups'] as core.List?)
?.map(
(value) => GoogleFirebaseAppdistroV1Group.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
nextPageToken: json_['nextPageToken'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final groups = this.groups;
final nextPageToken = this.nextPageToken;
return {'groups': ?groups, 'nextPageToken': ?nextPageToken};
}
}
/// The response message for `ListReleases`.
class GoogleFirebaseAppdistroV1ListReleasesResponse {
/// A short-lived token, which can be sent as `pageToken` to retrieve the next
/// page.
///
/// If this field is omitted, there are no subsequent pages.
core.String? nextPageToken;
/// The releases
core.List<GoogleFirebaseAppdistroV1Release>? releases;
GoogleFirebaseAppdistroV1ListReleasesResponse({
this.nextPageToken,
this.releases,
});
GoogleFirebaseAppdistroV1ListReleasesResponse.fromJson(core.Map json_)
: this(
nextPageToken: json_['nextPageToken'] as core.String?,
releases: (json_['releases'] as core.List?)
?.map(
(value) => GoogleFirebaseAppdistroV1Release.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final nextPageToken = this.nextPageToken;
final releases = this.releases;
return {'nextPageToken': ?nextPageToken, 'releases': ?releases};
}
}
/// The response message for `ListTesters`.
class GoogleFirebaseAppdistroV1ListTestersResponse {
/// A short-lived token, which can be sent as `pageToken` to retrieve the next
/// page.
///
/// If this field is omitted, there are no subsequent pages.
core.String? nextPageToken;
/// The testers listed.
core.List<GoogleFirebaseAppdistroV1Tester>? testers;
GoogleFirebaseAppdistroV1ListTestersResponse({
this.nextPageToken,
this.testers,
});
GoogleFirebaseAppdistroV1ListTestersResponse.fromJson(core.Map json_)
: this(
nextPageToken: json_['nextPageToken'] as core.String?,
testers: (json_['testers'] as core.List?)
?.map(
(value) => GoogleFirebaseAppdistroV1Tester.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final nextPageToken = this.nextPageToken;
final testers = this.testers;
return {'nextPageToken': ?nextPageToken, 'testers': ?testers};
}
}
/// A release of a Firebase app.
class GoogleFirebaseAppdistroV1Release {
/// A signed link (which expires in one hour) to directly download the app
/// binary (IPA/APK/AAB) file.
///
/// Output only.
core.String? binaryDownloadUri;
/// Build version of the release.
///
/// For an Android release, the build version is the `versionCode`. For an iOS
/// release, the build version is the `CFBundleVersion`.
///
/// Output only.
core.String? buildVersion;
/// The time the release was created.
///
/// Output only.
core.String? createTime;
/// Display version of the release.
///
/// For an Android release, the display version is the `versionName`. For an
/// iOS release, the display version is the `CFBundleShortVersionString`.
///
/// Output only.
core.String? displayVersion;
/// The time the release will expire.
///
/// Output only.
core.String? expireTime;
/// A link to the Firebase console displaying a single release.
///
/// Output only.
core.String? firebaseConsoleUri;
/// The name of the release resource.
///
/// Format: `projects/{project_number}/apps/{app}/releases/{release}`
core.String? name;
/// Notes of the release.
GoogleFirebaseAppdistroV1ReleaseNotes? releaseNotes;
/// A link to the release in the tester web clip or Android app that lets
/// testers (which were granted access to the app) view release notes and
/// install the app onto their devices.
///
/// Output only.
core.String? testingUri;
/// The time the release was last updated.
///
/// Output only.
core.String? updateTime;
GoogleFirebaseAppdistroV1Release({
this.binaryDownloadUri,
this.buildVersion,
this.createTime,
this.displayVersion,
this.expireTime,
this.firebaseConsoleUri,
this.name,
this.releaseNotes,
this.testingUri,
this.updateTime,
});
GoogleFirebaseAppdistroV1Release.fromJson(core.Map json_)
: this(
binaryDownloadUri: json_['binaryDownloadUri'] as core.String?,
buildVersion: json_['buildVersion'] as core.String?,
createTime: json_['createTime'] as core.String?,
displayVersion: json_['displayVersion'] as core.String?,
expireTime: json_['expireTime'] as core.String?,
firebaseConsoleUri: json_['firebaseConsoleUri'] as core.String?,
name: json_['name'] as core.String?,
releaseNotes: json_.containsKey('releaseNotes')
? GoogleFirebaseAppdistroV1ReleaseNotes.fromJson(
json_['releaseNotes'] as core.Map<core.String, core.dynamic>,
)
: null,
testingUri: json_['testingUri'] as core.String?,
updateTime: json_['updateTime'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final binaryDownloadUri = this.binaryDownloadUri;
final buildVersion = this.buildVersion;
final createTime = this.createTime;
final displayVersion = this.displayVersion;
final expireTime = this.expireTime;
final firebaseConsoleUri = this.firebaseConsoleUri;
final name = this.name;
final releaseNotes = this.releaseNotes;
final testingUri = this.testingUri;
final updateTime = this.updateTime;
return {
'binaryDownloadUri': ?binaryDownloadUri,
'buildVersion': ?buildVersion,
'createTime': ?createTime,
'displayVersion': ?displayVersion,
'expireTime': ?expireTime,
'firebaseConsoleUri': ?firebaseConsoleUri,
'name': ?name,
'releaseNotes': ?releaseNotes,
'testingUri': ?testingUri,
'updateTime': ?updateTime,
};
}
}
/// Notes that belong to a release.
class GoogleFirebaseAppdistroV1ReleaseNotes {
/// The text of the release notes.
core.String? text;
GoogleFirebaseAppdistroV1ReleaseNotes({this.text});
GoogleFirebaseAppdistroV1ReleaseNotes.fromJson(core.Map json_)
: this(text: json_['text'] as core.String?);
core.Map<core.String, core.dynamic> toJson() {
final text = this.text;
return {'text': ?text};
}
}
/// App bundle test certificate
class GoogleFirebaseAppdistroV1TestCertificate {
/// Hex string of MD5 hash of the test certificate used to resign the AAB
core.String? hashMd5;
/// Hex string of SHA1 hash of the test certificate used to resign the AAB
core.String? hashSha1;
/// Hex string of SHA256 hash of the test certificate used to resign the AAB
core.String? hashSha256;
GoogleFirebaseAppdistroV1TestCertificate({
this.hashMd5,
this.hashSha1,
this.hashSha256,
});
GoogleFirebaseAppdistroV1TestCertificate.fromJson(core.Map json_)
: this(
hashMd5: json_['hashMd5'] as core.String?,
hashSha1: json_['hashSha1'] as core.String?,
hashSha256: json_['hashSha256'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final hashMd5 = this.hashMd5;
final hashSha1 = this.hashSha1;
final hashSha256 = this.hashSha256;
return {
'hashMd5': ?hashMd5,
'hashSha1': ?hashSha1,
'hashSha256': ?hashSha256,
};
}
}
/// A person that can be invited to test apps in a Firebase project.
class GoogleFirebaseAppdistroV1Tester {
/// The name of the tester associated with the Google account used to accept
/// the tester invitation.
core.String? displayName;
/// The resource names of the groups this tester belongs to.
core.List<core.String>? groups;
/// The time the tester was last active.
///
/// This is the most recent time the tester installed one of the apps. If
/// they've never installed one or if the release no longer exists, this is
/// the time the tester was added to the project.
///
/// Output only.
core.String? lastActivityTime;
/// The name of the tester resource.
///
/// Format: `projects/{project_number}/testers/{email_address}`
core.String? name;
GoogleFirebaseAppdistroV1Tester({
this.displayName,
this.groups,
this.lastActivityTime,
this.name,
});
GoogleFirebaseAppdistroV1Tester.fromJson(core.Map json_)
: this(
displayName: json_['displayName'] as core.String?,
groups: (json_['groups'] as core.List?)
?.map((value) => value as core.String)
.toList(),
lastActivityTime: json_['lastActivityTime'] as core.String?,
name: json_['name'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final displayName = this.displayName;
final groups = this.groups;
final lastActivityTime = this.lastActivityTime;
final name = this.name;
return {
'displayName': ?displayName,
'groups': ?groups,
'lastActivityTime': ?lastActivityTime,
'name': ?name,
};
}
}
/// Request message for `UploadRelease`.
class GoogleFirebaseAppdistroV1UploadReleaseRequest {
/// Binary to upload
GdataMedia? blob;
GoogleFirebaseAppdistroV1UploadReleaseRequest({this.blob});
GoogleFirebaseAppdistroV1UploadReleaseRequest.fromJson(core.Map json_)
: this(
blob: json_.containsKey('blob')
? GdataMedia.fromJson(
json_['blob'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final blob = this.blob;
return {'blob': ?blob};
}
}
/// The request message for Operations.CancelOperation.
typedef GoogleLongrunningCancelOperationRequest = $Empty;
/// The response message for Operations.ListOperations.
class GoogleLongrunningListOperationsResponse {
/// The standard List next-page token.
core.String? nextPageToken;
/// A list of operations that matches the specified filter in the request.
core.List<GoogleLongrunningOperation>? operations;
/// Unordered list.
///
/// Unreachable resources. Populated when the request sets
/// `ListOperationsRequest.return_partial_success` and reads across
/// collections. For example, when attempting to list all resources across all
/// supported locations.
core.List<core.String>? unreachable;
GoogleLongrunningListOperationsResponse({
this.nextPageToken,
this.operations,
this.unreachable,
});
GoogleLongrunningListOperationsResponse.fromJson(core.Map json_)
: this(
nextPageToken: json_['nextPageToken'] as core.String?,
operations: (json_['operations'] as core.List?)
?.map(
(value) => GoogleLongrunningOperation.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
unreachable: (json_['unreachable'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final nextPageToken = this.nextPageToken;
final operations = this.operations;
final unreachable = this.unreachable;
return {
'nextPageToken': ?nextPageToken,
'operations': ?operations,
'unreachable': ?unreachable,
};
}
}
/// This resource represents a long-running operation that is the result of a
/// network API call.
class GoogleLongrunningOperation {
/// If the value is `false`, it means the operation is still in progress.
///
/// If `true`, the operation is completed, and either `error` or `response` is
/// available.
core.bool? done;
/// The error result of the operation in case of failure or cancellation.
GoogleRpcStatus? error;
/// Service-specific metadata associated with the operation.
///
/// It typically contains progress information and common metadata such as
/// create time. Some services might not provide such metadata. Any method
/// that returns a long-running operation should document the metadata type,
/// if any.
///
/// 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?>? metadata;
/// The server-assigned name, which is only unique within the same service
/// that originally returns it.
///
/// If you use the default HTTP mapping, the `name` should be a resource name
/// ending with `operations/{unique_id}`.
core.String? name;
/// The normal, successful response of the operation.
///
/// If the original method returns no data on success, such as `Delete`, the
/// response is `google.protobuf.Empty`. If the original method is standard
/// `Get`/`Create`/`Update`, the response should be the resource. For other
/// methods, the response should have the type `XxxResponse`, where `Xxx` is
/// the original method name. For example, if the original method name is
/// `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
///
/// 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?>? response;
GoogleLongrunningOperation({
this.done,
this.error,
this.metadata,
this.name,
this.response,
});
GoogleLongrunningOperation.fromJson(core.Map json_)
: this(
done: json_['done'] as core.bool?,
error: json_.containsKey('error')
? GoogleRpcStatus.fromJson(
json_['error'] as core.Map<core.String, core.dynamic>,
)
: null,
metadata: json_.containsKey('metadata')
? json_['metadata'] as core.Map<core.String, core.dynamic>
: null,
name: json_['name'] as core.String?,
response: json_.containsKey('response')
? json_['response'] as core.Map<core.String, core.dynamic>
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final done = this.done;
final error = this.error;
final metadata = this.metadata;
final name = this.name;
final response = this.response;
return {
'done': ?done,
'error': ?error,
'metadata': ?metadata,
'name': ?name,
'response': ?response,
};
}
}
/// The request message for Operations.WaitOperation.
typedef GoogleLongrunningWaitOperationRequest = $WaitOperationRequest;
/// A generic empty message that you can re-use to avoid defining duplicated
/// empty messages in your APIs.
///
/// A typical example is to use it as the request or the response type of an API
/// method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns
/// (google.protobuf.Empty); }
typedef GoogleProtobufEmpty = $Empty;
/// 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 GoogleRpcStatus = $Status00;