blob: 267ec2e830438fd77b8a0ab8203d3dcb09713fc5 [file] [edit]
// Copyright 2016 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 Rules API - v1
///
/// Creates and manages rules that determine when a Firebase Rules-enabled
/// service should permit a request.
///
/// For more information, see
/// <https://firebase.google.com/docs/storage/security>
///
/// Create an instance of [FirebaseRulesApi] to access these resources:
///
/// - [ProjectsResource]
/// - [ProjectsReleasesResource]
/// - [ProjectsRulesetsResource]
library;
import 'dart:async' as async;
import 'dart:convert' as convert;
import 'dart:core' as core;
import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
import 'package:http/http.dart' as http;
import '../shared.dart';
import '../src/user_agent.dart';
export 'package:_discoveryapis_commons/_discoveryapis_commons.dart'
show ApiRequestError, DetailedApiRequestError;
/// Creates and manages rules that determine when a Firebase Rules-enabled
/// service should permit a request.
class FirebaseRulesApi {
/// 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';
/// View and administer all your Firebase data and settings
static const firebaseScope = 'https://www.googleapis.com/auth/firebase';
/// View all your Firebase data and settings
static const firebaseReadonlyScope =
'https://www.googleapis.com/auth/firebase.readonly';
final commons.ApiRequester _requester;
ProjectsResource get projects => ProjectsResource(_requester);
FirebaseRulesApi(
http.Client client, {
core.String rootUrl = 'https://firebaserules.googleapis.com/',
core.String servicePath = '',
}) : _requester = commons.ApiRequester(
client,
rootUrl,
servicePath,
requestHeaders,
);
}
class ProjectsResource {
final commons.ApiRequester _requester;
ProjectsReleasesResource get releases => ProjectsReleasesResource(_requester);
ProjectsRulesetsResource get rulesets => ProjectsRulesetsResource(_requester);
ProjectsResource(commons.ApiRequester client) : _requester = client;
/// Test `Source` for syntactic and semantic correctness.
///
/// Issues present, if any, will be returned to the caller with a description,
/// severity, and source location. The test method may be executed with
/// `Source` or a `Ruleset` name. Passing `Source` is useful for unit testing
/// new rules. Passing a `Ruleset` name is useful for regression testing an
/// existing rule. The following is an example of `Source` that permits users
/// to upload images to a bucket bearing their user id and matching the
/// correct metadata: _*Example*_ // Users are allowed to subscribe and
/// unsubscribe to the blog. service firebase.storage { match
/// /users/{userId}/images/{imageName} { allow write: if userId ==
/// request.auth.uid && (imageName.matches('*.png$') ||
/// imageName.matches('*.jpg$')) && resource.mimeType.matches('^image/') } }
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. Tests may either provide `source` or a `Ruleset`
/// resource name. For tests against `source`, the resource name must refer to
/// the project: Format: `projects/{project_id}` For tests against a
/// `Ruleset`, this must be the `Ruleset` resource name: Format:
/// `projects/{project_id}/rulesets/{ruleset_id}`
/// Value must have pattern `^projects/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [TestRulesetResponse].
///
/// 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<TestRulesetResponse> test(
TestRulesetRequest 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') + ':test';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return TestRulesetResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
class ProjectsReleasesResource {
final commons.ApiRequester _requester;
ProjectsReleasesResource(commons.ApiRequester client) : _requester = client;
/// Create a `Release`.
///
/// Release names should reflect the developer's deployment practices. For
/// example, the release name may include the environment name, application
/// name, application version, or any other name meaningful to the developer.
/// Once a `Release` refers to a `Ruleset`, the rules can be enforced by
/// Firebase Rules-enabled services. More than one `Release` may be 'live'
/// concurrently. Consider the following three `Release` names for
/// `projects/foo` and the `Ruleset` to which they refer. Release Name -\>
/// Ruleset Name * projects/foo/releases/prod -\>
/// projects/foo/rulesets/uuid123 * projects/foo/releases/prod/beta -\>
/// projects/foo/rulesets/uuid123 * projects/foo/releases/prod/v23 -\>
/// projects/foo/rulesets/uuid456 The relationships reflect a `Ruleset`
/// rollout in progress. The `prod` and `prod/beta` releases refer to the same
/// `Ruleset`. However, `prod/v23` refers to a new `Ruleset`. The `Ruleset`
/// reference for a `Release` may be updated using the UpdateRelease method.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. Resource name for the project which owns this
/// `Release`. Format: `projects/{project_id}`
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Release].
///
/// 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<Release> create(
Release 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') + '/releases';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return Release.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
/// Delete a `Release` by resource name.
///
/// Request parameters:
///
/// [name] - Required. Resource name for the `Release` to delete. Format:
/// `projects/{project_id}/releases/{release_id}`
/// Value must have pattern `^projects/\[^/\]+/releases/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Empty].
///
/// 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<Empty> 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 Empty.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
/// Get a `Release` by name.
///
/// Request parameters:
///
/// [name] - Required. Resource name of the `Release`. Format:
/// `projects/{project_id}/releases/{release_id}`
/// Value must have pattern `^projects/\[^/\]+/releases/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Release].
///
/// 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<Release> 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 Release.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
/// Get the `Release` executable to use when enforcing rules.
///
/// Request parameters:
///
/// [name] - Required. Resource name of the `Release`. Format:
/// `projects/{project_id}/releases/{release_id}`
/// Value must have pattern `^projects/\[^/\]+/releases/.*$`.
///
/// [executableVersion] - Optional. The requested runtime executable version.
/// Defaults to FIREBASE_RULES_EXECUTABLE_V1.
/// Possible string values are:
/// - "RELEASE_EXECUTABLE_VERSION_UNSPECIFIED" : Executable format
/// unspecified. Defaults to FIREBASE_RULES_EXECUTABLE_V1
/// - "FIREBASE_RULES_EXECUTABLE_V1" : Firebase Rules syntax 'rules2'
/// executable versions: Custom AST for use with Java clients.
/// - "FIREBASE_RULES_EXECUTABLE_V2" : CEL-based executable for use with C++
/// clients.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GetReleaseExecutableResponse].
///
/// 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<GetReleaseExecutableResponse> getExecutable(
core.String name, {
core.String? executableVersion,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'executableVersion': ?executableVersion == null
? null
: [executableVersion],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$name') + ':getExecutable';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GetReleaseExecutableResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// List the `Release` values for a project.
///
/// This list may optionally be filtered by `Release` name, `Ruleset` name,
/// `TestSuite` name, or any combination thereof.
///
/// Request parameters:
///
/// [name] - Required. Resource name for the project. Format:
/// `projects/{project_id}`
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [filter] - Optional. `Release` filter. The list method supports filters
/// with restrictions on the `Release.name`, and `Release.ruleset_name`.
/// Example 1: A filter of 'name=prod*' might return `Release`s with names
/// within 'projects/foo' prefixed with 'prod': Name -\> Ruleset Name: *
/// projects/foo/releases/prod -\> projects/foo/rulesets/uuid1234 *
/// projects/foo/releases/prod/v1 -\> projects/foo/rulesets/uuid1234 *
/// projects/foo/releases/prod/v2 -\> projects/foo/rulesets/uuid8888 Example
/// 2: A filter of `name=prod* ruleset_name=uuid1234` would return only
/// `Release` instances for 'projects/foo' with names prefixed with 'prod'
/// referring to the same `Ruleset` name of 'uuid1234': Name -\> Ruleset Name:
/// * projects/foo/releases/prod -\> projects/foo/rulesets/1234 *
/// projects/foo/releases/prod/v1 -\> projects/foo/rulesets/1234 In the
/// examples, the filter parameters refer to the search filters are relative
/// to the project. Fully qualified prefixed may also be used.
///
/// [pageSize] - Optional. Page size to load. Maximum of 100. Defaults to 10.
/// Note: `page_size` is just a hint and the service may choose to load fewer
/// than `page_size` results due to the size of the output. To traverse all of
/// the releases, the caller should iterate until the `page_token` on the
/// response is empty.
///
/// [pageToken] - Optional. Next page token for the next batch of `Release`
/// instances.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListReleasesResponse].
///
/// 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<ListReleasesResponse> list(
core.String name, {
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('$name') + '/releases';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return ListReleasesResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// Update a `Release` via PATCH.
///
/// Only updates to `ruleset_name` will be honored. `Release` rename is not
/// supported. To create a `Release` use the CreateRelease method.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. Resource name for the project which owns this
/// `Release`. Format: `projects/{project_id}`
/// Value must have pattern `^projects/\[^/\]+/releases/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Release].
///
/// 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<Release> patch(
UpdateReleaseRequest 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');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return Release.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsRulesetsResource {
final commons.ApiRequester _requester;
ProjectsRulesetsResource(commons.ApiRequester client) : _requester = client;
/// Create a `Ruleset` from `Source`.
///
/// The `Ruleset` is given a unique generated name which is returned to the
/// caller. `Source` containing syntactic or semantics errors will result in
/// an error response indicating the first error encountered. For a detailed
/// view of `Source` issues, use TestRuleset.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. Resource name for Project which owns this `Ruleset`.
/// Format: `projects/{project_id}`
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Ruleset].
///
/// 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<Ruleset> create(
Ruleset 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') + '/rulesets';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return Ruleset.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
/// Delete a `Ruleset` by resource name.
///
/// If the `Ruleset` is referenced by a `Release` the operation will fail.
///
/// Request parameters:
///
/// [name] - Required. Resource name for the ruleset to delete. Format:
/// `projects/{project_id}/rulesets/{ruleset_id}`
/// Value must have pattern `^projects/\[^/\]+/rulesets/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Empty].
///
/// 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<Empty> 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 Empty.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
/// Get a `Ruleset` by name including the full `Source` contents.
///
/// Request parameters:
///
/// [name] - Required. Resource name for the ruleset to get. Format:
/// `projects/{project_id}/rulesets/{ruleset_id}`
/// Value must have pattern `^projects/\[^/\]+/rulesets/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Ruleset].
///
/// 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<Ruleset> 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 Ruleset.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
/// List `Ruleset` metadata only and optionally filter the results by
/// `Ruleset` name.
///
/// The full `Source` contents of a `Ruleset` may be retrieved with
/// GetRuleset.
///
/// Request parameters:
///
/// [name] - Required. Resource name for the project. Format:
/// `projects/{project_id}`
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [filter] - Optional. `Ruleset` filter. The list method supports filters
/// with restrictions on `Ruleset.name`. Filters on `Ruleset.create_time`
/// should use the `date` function which parses strings that conform to the
/// RFC 3339 date/time specifications. Example: `create_time >
/// date("2017-01-01T00:00:00Z") AND name=UUID-*`
///
/// [pageSize] - Optional. Page size to load. Maximum of 100. Defaults to 10.
/// Note: `page_size` is just a hint and the service may choose to load less
/// than `page_size` due to the size of the output. To traverse all of the
/// releases, caller should iterate until the `page_token` is empty.
///
/// [pageToken] - Optional. Next page token for loading the next batch of
/// `Ruleset` instances.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListRulesetsResponse].
///
/// 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<ListRulesetsResponse> list(
core.String name, {
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('$name') + '/rulesets';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return ListRulesetsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
}
/// Arg matchers for the mock function.
class Arg {
/// Argument matches any value provided.
Empty? anyValue;
/// Argument exactly matches value provided.
///
/// 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.Object? exactValue;
Arg({this.anyValue, this.exactValue});
Arg.fromJson(core.Map json_)
: this(
anyValue: json_.containsKey('anyValue')
? Empty.fromJson(
json_['anyValue'] as core.Map<core.String, core.dynamic>,
)
: null,
exactValue: json_['exactValue'],
);
core.Map<core.String, core.dynamic> toJson() {
final anyValue = this.anyValue;
final exactValue = this.exactValue;
return {'anyValue': ?anyValue, 'exactValue': ?exactValue};
}
}
/// 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 Empty = $Empty;
/// Describes where in a file an expression is found and what it was evaluated
/// to over the course of its use.
class ExpressionReport {
/// Subexpressions
core.List<ExpressionReport>? children;
/// Position of expression in original rules source.
SourcePosition? sourcePosition;
/// Values that this expression evaluated to when encountered.
core.List<ValueCount>? values;
ExpressionReport({this.children, this.sourcePosition, this.values});
ExpressionReport.fromJson(core.Map json_)
: this(
children: (json_['children'] as core.List?)
?.map(
(value) => ExpressionReport.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
sourcePosition: json_.containsKey('sourcePosition')
? SourcePosition.fromJson(
json_['sourcePosition'] as core.Map<core.String, core.dynamic>,
)
: null,
values: (json_['values'] as core.List?)
?.map(
(value) => ValueCount.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final children = this.children;
final sourcePosition = this.sourcePosition;
final values = this.values;
return {
'children': ?children,
'sourcePosition': ?sourcePosition,
'values': ?values,
};
}
}
/// `File` containing source content.
class File {
/// Textual Content.
///
/// Required.
core.String? content;
/// Fingerprint (e.g. github sha) associated with the `File`.
core.String? fingerprint;
core.List<core.int> get fingerprintAsBytes =>
convert.base64.decode(fingerprint!);
set fingerprintAsBytes(core.List<core.int> bytes_) {
fingerprint = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// File name.
///
/// Required.
core.String? name;
File({this.content, this.fingerprint, this.name});
File.fromJson(core.Map json_)
: this(
content: json_['content'] as core.String?,
fingerprint: json_['fingerprint'] as core.String?,
name: json_['name'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final content = this.content;
final fingerprint = this.fingerprint;
final name = this.name;
return {'content': ?content, 'fingerprint': ?fingerprint, 'name': ?name};
}
}
/// Represents a service-defined function call that was invoked during test
/// execution.
class FunctionCall {
/// The arguments that were provided to the function.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.List<core.Object?>? args;
/// Name of the function invoked.
core.String? function;
FunctionCall({this.args, this.function});
FunctionCall.fromJson(core.Map json_)
: this(
args: json_.containsKey('args') ? json_['args'] as core.List : null,
function: json_['function'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final args = this.args;
final function = this.function;
return {'args': ?args, 'function': ?function};
}
}
/// Mock function definition.
///
/// Mocks must refer to a function declared by the target service. The type of
/// the function args and result will be inferred at test time. If either the
/// arg or result values are not compatible with function type declaration, the
/// request will be considered invalid. More than one `FunctionMock` may be
/// provided for a given function name so long as the `Arg` matchers are
/// distinct. There may be only one function for a given overload where all
/// `Arg` values are `Arg.any_value`.
class FunctionMock {
/// The list of `Arg` values to match.
///
/// The order in which the arguments are provided is the order in which they
/// must appear in the function invocation.
core.List<Arg>? args;
/// The name of the function.
///
/// The function name must match one provided by a service declaration.
core.String? function;
/// The mock result of the function call.
Result? result;
FunctionMock({this.args, this.function, this.result});
FunctionMock.fromJson(core.Map json_)
: this(
args: (json_['args'] as core.List?)
?.map(
(value) =>
Arg.fromJson(value as core.Map<core.String, core.dynamic>),
)
.toList(),
function: json_['function'] as core.String?,
result: json_.containsKey('result')
? Result.fromJson(
json_['result'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final args = this.args;
final function = this.function;
final result = this.result;
return {'args': ?args, 'function': ?function, 'result': ?result};
}
}
/// The response for FirebaseRulesService.GetReleaseExecutable
class GetReleaseExecutableResponse {
/// Executable view of the `Ruleset` referenced by the `Release`.
core.String? executable;
core.List<core.int> get executableAsBytes =>
convert.base64.decode(executable!);
set executableAsBytes(core.List<core.int> bytes_) {
executable = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// The Rules runtime version of the executable.
/// Possible string values are:
/// - "RELEASE_EXECUTABLE_VERSION_UNSPECIFIED" : Executable format
/// unspecified. Defaults to FIREBASE_RULES_EXECUTABLE_V1
/// - "FIREBASE_RULES_EXECUTABLE_V1" : Firebase Rules syntax 'rules2'
/// executable versions: Custom AST for use with Java clients.
/// - "FIREBASE_RULES_EXECUTABLE_V2" : CEL-based executable for use with C++
/// clients.
core.String? executableVersion;
/// `Language` used to generate the executable bytes.
/// Possible string values are:
/// - "LANGUAGE_UNSPECIFIED" : Language unspecified. Defaults to
/// FIREBASE_RULES.
/// - "FIREBASE_RULES" : Firebase Rules language.
/// - "EVENT_FLOW_TRIGGERS" : Event Flow triggers.
core.String? language;
/// `Ruleset` name associated with the `Release` executable.
core.String? rulesetName;
/// Optional, indicates the freshness of the result.
///
/// The response is guaranteed to be the latest within an interval up to the
/// sync_time (inclusive).
core.String? syncTime;
/// Timestamp for the most recent `Release.update_time`.
core.String? updateTime;
GetReleaseExecutableResponse({
this.executable,
this.executableVersion,
this.language,
this.rulesetName,
this.syncTime,
this.updateTime,
});
GetReleaseExecutableResponse.fromJson(core.Map json_)
: this(
executable: json_['executable'] as core.String?,
executableVersion: json_['executableVersion'] as core.String?,
language: json_['language'] as core.String?,
rulesetName: json_['rulesetName'] as core.String?,
syncTime: json_['syncTime'] as core.String?,
updateTime: json_['updateTime'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final executable = this.executable;
final executableVersion = this.executableVersion;
final language = this.language;
final rulesetName = this.rulesetName;
final syncTime = this.syncTime;
final updateTime = this.updateTime;
return {
'executable': ?executable,
'executableVersion': ?executableVersion,
'language': ?language,
'rulesetName': ?rulesetName,
'syncTime': ?syncTime,
'updateTime': ?updateTime,
};
}
}
/// Issues include warnings, errors, and deprecation notices.
class Issue {
/// Short error description.
core.String? description;
/// The severity of the issue.
/// Possible string values are:
/// - "SEVERITY_UNSPECIFIED" : An unspecified severity.
/// - "DEPRECATION" : Deprecation issue for statements and method that may no
/// longer be supported or maintained.
/// - "WARNING" : Warnings such as: unused variables.
/// - "ERROR" : Errors such as: unmatched curly braces or variable
/// redefinition.
core.String? severity;
/// Position of the issue in the `Source`.
SourcePosition? sourcePosition;
Issue({this.description, this.severity, this.sourcePosition});
Issue.fromJson(core.Map json_)
: this(
description: json_['description'] as core.String?,
severity: json_['severity'] as core.String?,
sourcePosition: json_.containsKey('sourcePosition')
? SourcePosition.fromJson(
json_['sourcePosition'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final description = this.description;
final severity = this.severity;
final sourcePosition = this.sourcePosition;
return {
'description': ?description,
'severity': ?severity,
'sourcePosition': ?sourcePosition,
};
}
}
/// The response for FirebaseRulesService.ListReleases.
class ListReleasesResponse {
/// The pagination token to retrieve the next page of results.
///
/// If the value is empty, no further results remain.
core.String? nextPageToken;
/// List of `Release` instances.
core.List<Release>? releases;
ListReleasesResponse({this.nextPageToken, this.releases});
ListReleasesResponse.fromJson(core.Map json_)
: this(
nextPageToken: json_['nextPageToken'] as core.String?,
releases: (json_['releases'] as core.List?)
?.map(
(value) => Release.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 for FirebaseRulesService.ListRulesets.
class ListRulesetsResponse {
/// The pagination token to retrieve the next page of results.
///
/// If the value is empty, no further results remain.
core.String? nextPageToken;
/// List of `Ruleset` instances.
core.List<Ruleset>? rulesets;
ListRulesetsResponse({this.nextPageToken, this.rulesets});
ListRulesetsResponse.fromJson(core.Map json_)
: this(
nextPageToken: json_['nextPageToken'] as core.String?,
rulesets: (json_['rulesets'] as core.List?)
?.map(
(value) => Ruleset.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final nextPageToken = this.nextPageToken;
final rulesets = this.rulesets;
return {'nextPageToken': ?nextPageToken, 'rulesets': ?rulesets};
}
}
/// Metadata for a Ruleset.
class Metadata {
/// Services that this ruleset has declarations for (e.g., "cloud.firestore").
///
/// There may be 0+ of these.
core.List<core.String>? services;
Metadata({this.services});
Metadata.fromJson(core.Map json_)
: this(
services: (json_['services'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final services = this.services;
return {'services': ?services};
}
}
/// `Release` is a named reference to a `Ruleset`.
///
/// Once a `Release` refers to a `Ruleset`, rules-enabled services will be able
/// to enforce the `Ruleset`.
class Release {
/// Time the release was created.
///
/// Output only.
core.String? createTime;
/// Format: `projects/{project_id}/releases/{release_id}`
///
/// Required.
core.String? name;
/// Name of the `Ruleset` referred to by this `Release`.
///
/// The `Ruleset` must exist for the `Release` to be created.
///
/// Required.
core.String? rulesetName;
/// Time the release was updated.
///
/// Output only.
core.String? updateTime;
Release({this.createTime, this.name, this.rulesetName, this.updateTime});
Release.fromJson(core.Map json_)
: this(
createTime: json_['createTime'] as core.String?,
name: json_['name'] as core.String?,
rulesetName: json_['rulesetName'] as core.String?,
updateTime: json_['updateTime'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final createTime = this.createTime;
final name = this.name;
final rulesetName = this.rulesetName;
final updateTime = this.updateTime;
return {
'createTime': ?createTime,
'name': ?name,
'rulesetName': ?rulesetName,
'updateTime': ?updateTime,
};
}
}
/// Possible result values from the function mock invocation.
class Result {
/// The result is undefined, meaning the result could not be computed.
Empty? undefined;
/// The result is an actual value.
///
/// The type of the value must match that of the type declared by the service.
///
/// 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.Object? value;
Result({this.undefined, this.value});
Result.fromJson(core.Map json_)
: this(
undefined: json_.containsKey('undefined')
? Empty.fromJson(
json_['undefined'] as core.Map<core.String, core.dynamic>,
)
: null,
value: json_['value'],
);
core.Map<core.String, core.dynamic> toJson() {
final undefined = this.undefined;
final value = this.value;
return {'undefined': ?undefined, 'value': ?value};
}
}
/// `Ruleset` is an immutable copy of `Source` with a globally unique identifier
/// and a creation time.
class Ruleset {
/// Intended resource to which this Ruleset should be released.
///
/// May be left blank to signify the resource associated with the default
/// release. Expected format: firestore.googleapis.com/projects//databases/
///
/// Immutable.
core.String? attachmentPoint;
/// Time the `Ruleset` was created.
///
/// Output only.
core.String? createTime;
/// The metadata for this ruleset.
///
/// Output only.
Metadata? metadata;
/// Name of the `Ruleset`.
///
/// The ruleset_id is auto generated by the service. Format:
/// `projects/{project_id}/rulesets/{ruleset_id}`
///
/// Output only.
core.String? name;
/// `Source` for the `Ruleset`.
///
/// Required.
Source? source;
Ruleset({
this.attachmentPoint,
this.createTime,
this.metadata,
this.name,
this.source,
});
Ruleset.fromJson(core.Map json_)
: this(
attachmentPoint: json_['attachmentPoint'] as core.String?,
createTime: json_['createTime'] as core.String?,
metadata: json_.containsKey('metadata')
? Metadata.fromJson(
json_['metadata'] as core.Map<core.String, core.dynamic>,
)
: null,
name: json_['name'] as core.String?,
source: json_.containsKey('source')
? Source.fromJson(
json_['source'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final attachmentPoint = this.attachmentPoint;
final createTime = this.createTime;
final metadata = this.metadata;
final name = this.name;
final source = this.source;
return {
'attachmentPoint': ?attachmentPoint,
'createTime': ?createTime,
'metadata': ?metadata,
'name': ?name,
'source': ?source,
};
}
}
/// `Source` is one or more `File` messages comprising a logical set of rules.
class Source {
/// `File` set constituting the `Source` bundle.
///
/// Required.
core.List<File>? files;
Source({this.files});
Source.fromJson(core.Map json_)
: this(
files: (json_['files'] as core.List?)
?.map(
(value) =>
File.fromJson(value as core.Map<core.String, core.dynamic>),
)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final files = this.files;
return {'files': ?files};
}
}
/// Position in the `Source` content including its line, column number, and an
/// index of the `File` in the `Source` message.
///
/// Used for debug purposes.
class SourcePosition {
/// First column on the source line associated with the source fragment.
core.int? column;
/// Start position relative to the beginning of the file.
core.int? currentOffset;
/// End position relative to the beginning of the file.
core.int? endOffset;
/// Name of the `File`.
core.String? fileName;
/// Line number of the source fragment.
///
/// 1-based.
core.int? line;
SourcePosition({
this.column,
this.currentOffset,
this.endOffset,
this.fileName,
this.line,
});
SourcePosition.fromJson(core.Map json_)
: this(
column: json_['column'] as core.int?,
currentOffset: json_['currentOffset'] as core.int?,
endOffset: json_['endOffset'] as core.int?,
fileName: json_['fileName'] as core.String?,
line: json_['line'] as core.int?,
);
core.Map<core.String, core.dynamic> toJson() {
final column = this.column;
final currentOffset = this.currentOffset;
final endOffset = this.endOffset;
final fileName = this.fileName;
final line = this.line;
return {
'column': ?column,
'currentOffset': ?currentOffset,
'endOffset': ?endOffset,
'fileName': ?fileName,
'line': ?line,
};
}
}
/// `TestCase` messages provide the request context and an expectation as to
/// whether the given context will be allowed or denied.
///
/// Test cases may specify the `request`, `resource`, and `function_mocks` to
/// mock a function call to a service-provided function. The `request` object
/// represents context present at request-time. The `resource` is the value of
/// the target resource as it appears in persistent storage before the request
/// is executed.
class TestCase {
/// Test expectation.
/// Possible string values are:
/// - "EXPECTATION_UNSPECIFIED" : Unspecified expectation.
/// - "ALLOW" : Expect an allowed result.
/// - "DENY" : Expect a denied result.
core.String? expectation;
/// Specifies what should be included in the response.
/// Possible string values are:
/// - "LEVEL_UNSPECIFIED" : No level has been specified. Defaults to "NONE"
/// behavior.
/// - "NONE" : Do not include any additional information.
/// - "FULL" : Include detailed reporting on expressions evaluated.
/// - "VISITED" : Only include the expressions that were visited during
/// evaluation.
core.String? expressionReportLevel;
/// Optional function mocks for service-defined functions.
///
/// If not set, any service defined function is expected to return an error,
/// which may or may not influence the test outcome.
core.List<FunctionMock>? functionMocks;
/// Specifies whether paths (such as request.path) are encoded and how.
/// Possible string values are:
/// - "ENCODING_UNSPECIFIED" : No encoding has been specified. Defaults to
/// "URL_ENCODED" behavior.
/// - "URL_ENCODED" : Treats path segments as URL encoded but with non-encoded
/// separators ("/"). This is the default behavior.
/// - "PLAIN" : Treats total path as non-URL encoded e.g. raw.
core.String? pathEncoding;
/// Request context.
///
/// The exact format of the request context is service-dependent. See the
/// appropriate service documentation for information about the supported
/// fields and types on the request. Minimally, all services support the
/// following fields and types: Request field | Type
/// ---------------|----------------- auth.uid | `string` auth.token | `map`
/// headers | `map` method | `string` params | `map` path | `string` time |
/// `google.protobuf.Timestamp` If the request value is not well-formed for
/// the service, the request will be rejected as an invalid argument.
///
/// 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.Object? request;
/// Optional resource value as it appears in persistent storage before the
/// request is fulfilled.
///
/// The resource type depends on the `request.path` value.
///
/// 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.Object? resource;
TestCase({
this.expectation,
this.expressionReportLevel,
this.functionMocks,
this.pathEncoding,
this.request,
this.resource,
});
TestCase.fromJson(core.Map json_)
: this(
expectation: json_['expectation'] as core.String?,
expressionReportLevel: json_['expressionReportLevel'] as core.String?,
functionMocks: (json_['functionMocks'] as core.List?)
?.map(
(value) => FunctionMock.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
pathEncoding: json_['pathEncoding'] as core.String?,
request: json_['request'],
resource: json_['resource'],
);
core.Map<core.String, core.dynamic> toJson() {
final expectation = this.expectation;
final expressionReportLevel = this.expressionReportLevel;
final functionMocks = this.functionMocks;
final pathEncoding = this.pathEncoding;
final request = this.request;
final resource = this.resource;
return {
'expectation': ?expectation,
'expressionReportLevel': ?expressionReportLevel,
'functionMocks': ?functionMocks,
'pathEncoding': ?pathEncoding,
'request': ?request,
'resource': ?resource,
};
}
}
/// Test result message containing the state of the test as well as a
/// description and source position for test failures.
class TestResult {
/// Debug messages related to test execution issues encountered during
/// evaluation.
///
/// Debug messages may be related to too many or too few invocations of
/// function mocks or to runtime errors that occur during evaluation. For
/// example: ```Unable to read variable [name: "resource"]```
core.List<core.String>? debugMessages;
/// Position in the `Source` or `Ruleset` where the principle runtime error
/// occurs.
///
/// Evaluation of an expression may result in an error. Rules are deny by
/// default, so a `DENY` expectation when an error is generated is valid. When
/// there is a `DENY` with an error, the `SourcePosition` is returned. E.g.
/// `error_position { line: 19 column: 37 }`
SourcePosition? errorPosition;
/// The mapping from expression in the ruleset AST to the values they were
/// evaluated to.
///
/// Partially-nested to mirror AST structure. Note that this field is actually
/// tracking expressions and not permission statements in contrast to the
/// "visited_expressions" field above. Literal expressions are omitted.
core.List<ExpressionReport>? expressionReports;
/// The set of function calls made to service-defined methods.
///
/// Function calls are included in the order in which they are encountered
/// during evaluation, are provided for both mocked and unmocked functions,
/// and included on the response regardless of the test `state`.
core.List<FunctionCall>? functionCalls;
/// State of the test.
/// Possible string values are:
/// - "STATE_UNSPECIFIED" : Test state is not set.
/// - "SUCCESS" : Test is a success.
/// - "FAILURE" : Test is a failure.
core.String? state;
/// The set of visited permission expressions for a given test.
///
/// This returns the positions and evaluation results of all visited
/// permission expressions which were relevant to the test case, e.g. ```
/// match /path { allow read if: } ``` For a detailed report of the
/// intermediate evaluation states, see the `expression_reports` field
core.List<VisitedExpression>? visitedExpressions;
TestResult({
this.debugMessages,
this.errorPosition,
this.expressionReports,
this.functionCalls,
this.state,
this.visitedExpressions,
});
TestResult.fromJson(core.Map json_)
: this(
debugMessages: (json_['debugMessages'] as core.List?)
?.map((value) => value as core.String)
.toList(),
errorPosition: json_.containsKey('errorPosition')
? SourcePosition.fromJson(
json_['errorPosition'] as core.Map<core.String, core.dynamic>,
)
: null,
expressionReports: (json_['expressionReports'] as core.List?)
?.map(
(value) => ExpressionReport.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
functionCalls: (json_['functionCalls'] as core.List?)
?.map(
(value) => FunctionCall.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
state: json_['state'] as core.String?,
visitedExpressions: (json_['visitedExpressions'] as core.List?)
?.map(
(value) => VisitedExpression.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final debugMessages = this.debugMessages;
final errorPosition = this.errorPosition;
final expressionReports = this.expressionReports;
final functionCalls = this.functionCalls;
final state = this.state;
final visitedExpressions = this.visitedExpressions;
return {
'debugMessages': ?debugMessages,
'errorPosition': ?errorPosition,
'expressionReports': ?expressionReports,
'functionCalls': ?functionCalls,
'state': ?state,
'visitedExpressions': ?visitedExpressions,
};
}
}
/// The request for FirebaseRulesService.TestRuleset.
class TestRulesetRequest {
/// Optional `Source` to be checked for correctness.
///
/// This field must not be set when the resource name refers to a `Ruleset`.
///
/// Optional.
Source? source;
/// The tests to execute against the `Source`.
///
/// When `Source` is provided inline, the test cases will only be run if the
/// `Source` is syntactically and semantically valid. Inline `TestSuite` to
/// run.
///
/// Required.
TestSuite? testSuite;
TestRulesetRequest({this.source, this.testSuite});
TestRulesetRequest.fromJson(core.Map json_)
: this(
source: json_.containsKey('source')
? Source.fromJson(
json_['source'] as core.Map<core.String, core.dynamic>,
)
: null,
testSuite: json_.containsKey('testSuite')
? TestSuite.fromJson(
json_['testSuite'] as core.Map<core.String, core.dynamic>,
)
: null,
);
core.Map<core.String, core.dynamic> toJson() {
final source = this.source;
final testSuite = this.testSuite;
return {'source': ?source, 'testSuite': ?testSuite};
}
}
/// The response for FirebaseRulesService.TestRuleset.
class TestRulesetResponse {
/// Syntactic and semantic `Source` issues of varying severity.
///
/// Issues of `ERROR` severity will prevent tests from executing.
core.List<Issue>? issues;
/// The set of test results given the test cases in the `TestSuite`.
///
/// The results will appear in the same order as the test cases appear in the
/// `TestSuite`.
core.List<TestResult>? testResults;
TestRulesetResponse({this.issues, this.testResults});
TestRulesetResponse.fromJson(core.Map json_)
: this(
issues: (json_['issues'] as core.List?)
?.map(
(value) =>
Issue.fromJson(value as core.Map<core.String, core.dynamic>),
)
.toList(),
testResults: (json_['testResults'] as core.List?)
?.map(
(value) => TestResult.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final issues = this.issues;
final testResults = this.testResults;
return {'issues': ?issues, 'testResults': ?testResults};
}
}
/// `TestSuite` is a collection of `TestCase` instances that validate the
/// logical correctness of a `Ruleset`.
///
/// The `TestSuite` may be referenced in-line within a `TestRuleset` invocation
/// or as part of a `Release` object as a pre-release check.
class TestSuite {
/// Collection of test cases associated with the `TestSuite`.
core.List<TestCase>? testCases;
TestSuite({this.testCases});
TestSuite.fromJson(core.Map json_)
: this(
testCases: (json_['testCases'] as core.List?)
?.map(
(value) => TestCase.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final testCases = this.testCases;
return {'testCases': ?testCases};
}
}
/// The request for FirebaseRulesService.UpdateRelease.
class UpdateReleaseRequest {
/// `Release` to update.
///
/// Required.
Release? release;
/// Specifies which fields to update.
///
/// Optional.
core.String? updateMask;
UpdateReleaseRequest({this.release, this.updateMask});
UpdateReleaseRequest.fromJson(core.Map json_)
: this(
release: json_.containsKey('release')
? Release.fromJson(
json_['release'] as core.Map<core.String, core.dynamic>,
)
: null,
updateMask: json_['updateMask'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final release = this.release;
final updateMask = this.updateMask;
return {'release': ?release, 'updateMask': ?updateMask};
}
}
/// Tuple for how many times an Expression was evaluated to a particular
/// ExpressionValue.
class ValueCount {
/// The amount of times that expression returned.
core.int? count;
/// The return value of the expression
///
/// 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.Object? value;
ValueCount({this.count, this.value});
ValueCount.fromJson(core.Map json_)
: this(count: json_['count'] as core.int?, value: json_['value']);
core.Map<core.String, core.dynamic> toJson() {
final count = this.count;
final value = this.value;
return {'count': ?count, 'value': ?value};
}
}
/// Store the position and access outcome for an expression visited in rules.
class VisitedExpression {
/// Position in the `Source` or `Ruleset` where an expression was visited.
SourcePosition? sourcePosition;
/// The evaluated value for the visited expression, e.g. true/false
///
/// 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.Object? value;
VisitedExpression({this.sourcePosition, this.value});
VisitedExpression.fromJson(core.Map json_)
: this(
sourcePosition: json_.containsKey('sourcePosition')
? SourcePosition.fromJson(
json_['sourcePosition'] as core.Map<core.String, core.dynamic>,
)
: null,
value: json_['value'],
);
core.Map<core.String, core.dynamic> toJson() {
final sourcePosition = this.sourcePosition;
final value = this.value;
return {'sourcePosition': ?sourcePosition, 'value': ?value};
}
}