aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Protos/protos/google/firestore
diff options
context:
space:
mode:
Diffstat (limited to 'Firestore/Protos/protos/google/firestore')
-rw-r--r--Firestore/Protos/protos/google/firestore/v1beta1/common.proto82
-rw-r--r--Firestore/Protos/protos/google/firestore/v1beta1/document.proto148
-rw-r--r--Firestore/Protos/protos/google/firestore/v1beta1/firestore.proto719
-rw-r--r--Firestore/Protos/protos/google/firestore/v1beta1/query.proto231
-rw-r--r--Firestore/Protos/protos/google/firestore/v1beta1/write.proto189
5 files changed, 1369 insertions, 0 deletions
diff --git a/Firestore/Protos/protos/google/firestore/v1beta1/common.proto b/Firestore/Protos/protos/google/firestore/v1beta1/common.proto
new file mode 100644
index 0000000..e624323
--- /dev/null
+++ b/Firestore/Protos/protos/google/firestore/v1beta1/common.proto
@@ -0,0 +1,82 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.firestore.v1beta1;
+
+import "google/api/annotations.proto";
+import "google/protobuf/timestamp.proto";
+
+option csharp_namespace = "Google.Cloud.Firestore.V1Beta1";
+option go_package = "google.golang.org/genproto/googleapis/firestore/v1beta1;firestore";
+option java_multiple_files = true;
+option java_outer_classname = "CommonProto";
+option java_package = "com.google.firestore.v1beta1";
+option objc_class_prefix = "GCFS";
+
+
+// A set of field paths on a document.
+// Used to restrict a get or update operation on a document to a subset of its
+// fields.
+// This is different from standard field masks, as this is always scoped to a
+// [Document][google.firestore.v1beta1.Document], and takes in account the dynamic nature of [Value][google.firestore.v1beta1.Value].
+message DocumentMask {
+ // The list of field paths in the mask. See [Document.fields][google.firestore.v1beta1.Document.fields] for a field
+ // path syntax reference.
+ repeated string field_paths = 1;
+}
+
+// A precondition on a document, used for conditional operations.
+message Precondition {
+ // The type of precondition.
+ oneof condition_type {
+ // When set to `true`, the target document must exist.
+ // When set to `false`, the target document must not exist.
+ bool exists = 1;
+
+ // When set, the target document must exist and have been last updated at
+ // that time.
+ google.protobuf.Timestamp update_time = 2;
+ }
+}
+
+// Options for creating a new transaction.
+message TransactionOptions {
+ // Options for a transaction that can be used to read and write documents.
+ message ReadWrite {
+ // An optional transaction to retry.
+ bytes retry_transaction = 1;
+ }
+
+ // Options for a transaction that can only be used to read documents.
+ message ReadOnly {
+ // The consistency mode for this transaction. If not set, defaults to strong
+ // consistency.
+ oneof consistency_selector {
+ // Reads documents at the given time.
+ // This may not be older than 60 seconds.
+ google.protobuf.Timestamp read_time = 2;
+ }
+ }
+
+ // The mode of the transaction.
+ oneof mode {
+ // The transaction can only be used for read operations.
+ ReadOnly read_only = 2;
+
+ // The transaction can be used for both read and write operations.
+ ReadWrite read_write = 3;
+ }
+}
diff --git a/Firestore/Protos/protos/google/firestore/v1beta1/document.proto b/Firestore/Protos/protos/google/firestore/v1beta1/document.proto
new file mode 100644
index 0000000..cf6001d
--- /dev/null
+++ b/Firestore/Protos/protos/google/firestore/v1beta1/document.proto
@@ -0,0 +1,148 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.firestore.v1beta1;
+
+import "google/api/annotations.proto";
+import "google/protobuf/struct.proto";
+import "google/protobuf/timestamp.proto";
+import "google/type/latlng.proto";
+
+option csharp_namespace = "Google.Cloud.Firestore.V1Beta1";
+option go_package = "google.golang.org/genproto/googleapis/firestore/v1beta1;firestore";
+option java_multiple_files = true;
+option java_outer_classname = "DocumentProto";
+option java_package = "com.google.firestore.v1beta1";
+option objc_class_prefix = "GCFS";
+
+
+// A Firestore document.
+//
+// Must not exceed 1 MiB - 4 bytes.
+message Document {
+ // The resource name of the document, for example
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ string name = 1;
+
+ // The document's fields.
+ //
+ // The map keys represent field names.
+ //
+ // A simple field name contains only characters `a` to `z`, `A` to `Z`,
+ // `0` to `9`, or `_`, and must not start with `0` to `9` or `_`. For example,
+ // `foo_bar_17`.
+ //
+ // Field names matching the regular expression `__.*__` are reserved. Reserved
+ // field names are forbidden except in certain documented contexts. The map
+ // keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
+ // empty.
+ //
+ // Field paths may be used in other contexts to refer to structured fields
+ // defined here. For `map_value`, the field path is represented by the simple
+ // or quoted field names of the containing fields, delimited by `.`. For
+ // example, the structured field
+ // `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
+ // represented by the field path `foo.x&y`.
+ //
+ // Within a field path, a quoted field name starts and ends with `` ` `` and
+ // may contain any character. Some characters, including `` ` ``, must be
+ // escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
+ // `` `bak\`tik` `` represents `` bak`tik ``.
+ map<string, Value> fields = 2;
+
+ // Output only. The time at which the document was created.
+ //
+ // This value increases monotonically when a document is deleted then
+ // recreated. It can also be compared to values from other documents and
+ // the `read_time` of a query.
+ google.protobuf.Timestamp create_time = 3;
+
+ // Output only. The time at which the document was last changed.
+ //
+ // This value is initally set to the `create_time` then increases
+ // monotonically with each change to the document. It can also be
+ // compared to values from other documents and the `read_time` of a query.
+ google.protobuf.Timestamp update_time = 4;
+}
+
+// A message that can hold any of the supported value types.
+message Value {
+ // Must have a value set.
+ oneof value_type {
+ // A null value.
+ google.protobuf.NullValue null_value = 11;
+
+ // A boolean value.
+ bool boolean_value = 1;
+
+ // An integer value.
+ int64 integer_value = 2;
+
+ // A double value.
+ double double_value = 3;
+
+ // A timestamp value.
+ //
+ // Precise only to microseconds. When stored, any additional precision is
+ // rounded down.
+ google.protobuf.Timestamp timestamp_value = 10;
+
+ // A string value.
+ //
+ // The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
+ // Only the first 1,500 bytes of the UTF-8 representation are considered by
+ // queries.
+ string string_value = 17;
+
+ // A bytes value.
+ //
+ // Must not exceed 1 MiB - 89 bytes.
+ // Only the first 1,500 bytes are considered by queries.
+ bytes bytes_value = 18;
+
+ // A reference to a document. For example:
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ string reference_value = 5;
+
+ // A geo point value representing a point on the surface of Earth.
+ google.type.LatLng geo_point_value = 8;
+
+ // An array value.
+ //
+ // Cannot contain another array value.
+ ArrayValue array_value = 9;
+
+ // A map value.
+ MapValue map_value = 6;
+ }
+}
+
+// An array value.
+message ArrayValue {
+ // Values in the array.
+ repeated Value values = 1;
+}
+
+// A map value.
+message MapValue {
+ // The map's fields.
+ //
+ // The map keys represent field names. Field names matching the regular
+ // expression `__.*__` are reserved. Reserved field names are forbidden except
+ // in certain documented contexts. The map keys, represented as UTF-8, must
+ // not exceed 1,500 bytes and cannot be empty.
+ map<string, Value> fields = 1;
+}
diff --git a/Firestore/Protos/protos/google/firestore/v1beta1/firestore.proto b/Firestore/Protos/protos/google/firestore/v1beta1/firestore.proto
new file mode 100644
index 0000000..3939caa
--- /dev/null
+++ b/Firestore/Protos/protos/google/firestore/v1beta1/firestore.proto
@@ -0,0 +1,719 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.firestore.v1beta1;
+
+import "google/api/annotations.proto";
+import "google/firestore/v1beta1/common.proto";
+import "google/firestore/v1beta1/document.proto";
+import "google/firestore/v1beta1/query.proto";
+import "google/firestore/v1beta1/write.proto";
+import "google/protobuf/empty.proto";
+import "google/protobuf/timestamp.proto";
+import "google/rpc/status.proto";
+
+option csharp_namespace = "Google.Cloud.Firestore.V1Beta1";
+option go_package = "google.golang.org/genproto/googleapis/firestore/v1beta1;firestore";
+option java_multiple_files = true;
+option java_outer_classname = "FirestoreProto";
+option java_package = "com.google.firestore.v1beta1";
+option objc_class_prefix = "GCFS";
+
+// Specification of the Firestore API.
+
+
+
+// The Cloud Firestore service.
+//
+// This service exposes several types of comparable timestamps:
+//
+// * `create_time` - The time at which a document was created. Changes only
+// when a document is deleted, then re-created. Increases in a strict
+// monotonic fashion.
+// * `update_time` - The time at which a document was last updated. Changes
+// every time a document is modified. Does not change when a write results
+// in no modifications. Increases in a strict monotonic fashion.
+// * `read_time` - The time at which a particular state was observed. Used
+// to denote a consistent snapshot of the database or the time at which a
+// Document was observed to not exist.
+// * `commit_time` - The time at which the writes in a transaction were
+// committed. Any read with an equal or greater `read_time` is guaranteed
+// to see the effects of the transaction.
+service Firestore {
+ // Gets a single document.
+ rpc GetDocument(GetDocumentRequest) returns (Document) {
+ option (google.api.http) = { get: "/v1beta1/{name=projects/*/databases/*/documents/*/**}" };
+ }
+
+ // Lists documents.
+ rpc ListDocuments(ListDocumentsRequest) returns (ListDocumentsResponse) {
+ option (google.api.http) = { get: "/v1beta1/{parent=projects/*/databases/*/documents/*/**}/{collection_id}" };
+ }
+
+ // Creates a new document.
+ rpc CreateDocument(CreateDocumentRequest) returns (Document) {
+ option (google.api.http) = { post: "/v1beta1/{parent=projects/*/databases/*/documents/**}/{collection_id}" body: "document" };
+ }
+
+ // Updates or inserts a document.
+ rpc UpdateDocument(UpdateDocumentRequest) returns (Document) {
+ option (google.api.http) = { patch: "/v1beta1/{document.name=projects/*/databases/*/documents/*/**}" body: "document" };
+ }
+
+ // Deletes a document.
+ rpc DeleteDocument(DeleteDocumentRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = { delete: "/v1beta1/{name=projects/*/databases/*/documents/*/**}" };
+ }
+
+ // Gets multiple documents.
+ //
+ // Documents returned by this method are not guaranteed to be returned in the
+ // same order that they were requested.
+ rpc BatchGetDocuments(BatchGetDocumentsRequest) returns (stream BatchGetDocumentsResponse) {
+ option (google.api.http) = { post: "/v1beta1/{database=projects/*/databases/*}/documents:batchGet" body: "*" };
+ }
+
+ // Starts a new transaction.
+ rpc BeginTransaction(BeginTransactionRequest) returns (BeginTransactionResponse) {
+ option (google.api.http) = { post: "/v1beta1/{database=projects/*/databases/*}/documents:beginTransaction" body: "*" };
+ }
+
+ // Commits a transaction, while optionally updating documents.
+ rpc Commit(CommitRequest) returns (CommitResponse) {
+ option (google.api.http) = { post: "/v1beta1/{database=projects/*/databases/*}/documents:commit" body: "*" };
+ }
+
+ // Rolls back a transaction.
+ rpc Rollback(RollbackRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = { post: "/v1beta1/{database=projects/*/databases/*}/documents:rollback" body: "*" };
+ }
+
+ // Runs a query.
+ rpc RunQuery(RunQueryRequest) returns (stream RunQueryResponse) {
+ option (google.api.http) = { post: "/v1beta1/{parent=projects/*/databases/*/documents}:runQuery" body: "*" };
+ }
+
+ // Streams batches of document updates and deletes, in order.
+ rpc Write(stream WriteRequest) returns (stream WriteResponse) {
+ option (google.api.http) = { post: "/v1beta1/{database=projects/*/databases/*}/documents:write" body: "*" };
+ }
+
+ // Listens to changes.
+ rpc Listen(stream ListenRequest) returns (stream ListenResponse) {
+ option (google.api.http) = { post: "/v1beta1/{database=projects/*/databases/*}/documents:listen" body: "*" };
+ }
+
+ // Lists all the collection IDs underneath a document.
+ rpc ListCollectionIds(ListCollectionIdsRequest) returns (ListCollectionIdsResponse) {
+ option (google.api.http) = { post: "/v1beta1/{parent=projects/*/databases/*/documents}:listCollectionIds" body: "*" };
+ }
+}
+
+// The request for [Firestore.GetDocument][google.firestore.v1beta1.Firestore.GetDocument].
+message GetDocumentRequest {
+ // The resource name of the Document to get. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ string name = 1;
+
+ // The fields to return. If not set, returns all fields.
+ //
+ // If the document has a field that is not present in this mask, that field
+ // will not be returned in the response.
+ DocumentMask mask = 2;
+
+ // The consistency mode for this transaction.
+ // If not set, defaults to strong consistency.
+ oneof consistency_selector {
+ // Reads the document in a transaction.
+ bytes transaction = 3;
+
+ // Reads the version of the document at the given time.
+ // This may not be older than 60 seconds.
+ google.protobuf.Timestamp read_time = 5;
+ }
+}
+
+// The request for [Firestore.ListDocuments][google.firestore.v1beta1.Firestore.ListDocuments].
+message ListDocumentsRequest {
+ // The parent resource name. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents` or
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ // For example:
+ // `projects/my-project/databases/my-database/documents` or
+ // `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`
+ string parent = 1;
+
+ // The collection ID, relative to `parent`, to list. For example: `chatrooms`
+ // or `messages`.
+ string collection_id = 2;
+
+ // The maximum number of documents to return.
+ int32 page_size = 3;
+
+ // The `next_page_token` value returned from a previous List request, if any.
+ string page_token = 4;
+
+ // The order to sort results by. For example: `priority desc, name`.
+ string order_by = 6;
+
+ // The fields to return. If not set, returns all fields.
+ //
+ // If a document has a field that is not present in this mask, that field
+ // will not be returned in the response.
+ DocumentMask mask = 7;
+
+ // The consistency mode for this transaction.
+ // If not set, defaults to strong consistency.
+ oneof consistency_selector {
+ // Reads documents in a transaction.
+ bytes transaction = 8;
+
+ // Reads documents as they were at the given time.
+ // This may not be older than 60 seconds.
+ google.protobuf.Timestamp read_time = 10;
+ }
+
+ // If the list should show missing documents. A missing document is a
+ // document that does not exist but has sub-documents. These documents will
+ // be returned with a key but will not have fields, [Document.create_time][google.firestore.v1beta1.Document.create_time],
+ // or [Document.update_time][google.firestore.v1beta1.Document.update_time] set.
+ //
+ // Requests with `show_missing` may not specify `where` or
+ // `order_by`.
+ bool show_missing = 12;
+}
+
+// The response for [Firestore.ListDocuments][google.firestore.v1beta1.Firestore.ListDocuments].
+message ListDocumentsResponse {
+ // The Documents found.
+ repeated Document documents = 1;
+
+ // The next page token.
+ string next_page_token = 2;
+}
+
+// The request for [Firestore.CreateDocument][google.firestore.v1beta1.Firestore.CreateDocument].
+message CreateDocumentRequest {
+ // The parent resource. For example:
+ // `projects/{project_id}/databases/{database_id}/documents` or
+ // `projects/{project_id}/databases/{database_id}/documents/chatrooms/{chatroom_id}`
+ string parent = 1;
+
+ // The collection ID, relative to `parent`, to list. For example: `chatrooms`.
+ string collection_id = 2;
+
+ // The client-assigned document ID to use for this document.
+ //
+ // Optional. If not specified, an ID will be assigned by the service.
+ string document_id = 3;
+
+ // The document to create. `name` must not be set.
+ Document document = 4;
+
+ // The fields to return. If not set, returns all fields.
+ //
+ // If the document has a field that is not present in this mask, that field
+ // will not be returned in the response.
+ DocumentMask mask = 5;
+}
+
+// The request for [Firestore.UpdateDocument][google.firestore.v1beta1.Firestore.UpdateDocument].
+message UpdateDocumentRequest {
+ // The updated document.
+ // Creates the document if it does not already exist.
+ Document document = 1;
+
+ // The fields to update.
+ // None of the field paths in the mask may contain a reserved name.
+ //
+ // If the document exists on the server and has fields not referenced in the
+ // mask, they are left unchanged.
+ // Fields referenced in the mask, but not present in the input document, are
+ // deleted from the document on the server.
+ DocumentMask update_mask = 2;
+
+ // The fields to return. If not set, returns all fields.
+ //
+ // If the document has a field that is not present in this mask, that field
+ // will not be returned in the response.
+ DocumentMask mask = 3;
+
+ // An optional precondition on the document.
+ // The request will fail if this is set and not met by the target document.
+ Precondition current_document = 4;
+}
+
+// The request for [Firestore.DeleteDocument][google.firestore.v1beta1.Firestore.DeleteDocument].
+message DeleteDocumentRequest {
+ // The resource name of the Document to delete. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ string name = 1;
+
+ // An optional precondition on the document.
+ // The request will fail if this is set and not met by the target document.
+ Precondition current_document = 2;
+}
+
+// The request for [Firestore.BatchGetDocuments][google.firestore.v1beta1.Firestore.BatchGetDocuments].
+message BatchGetDocumentsRequest {
+ // The database name. In the format:
+ // `projects/{project_id}/databases/{database_id}`.
+ string database = 1;
+
+ // The names of the documents to retrieve. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ // The request will fail if any of the document is not a child resource of the
+ // given `database`. Duplicate names will be elided.
+ repeated string documents = 2;
+
+ // The fields to return. If not set, returns all fields.
+ //
+ // If a document has a field that is not present in this mask, that field will
+ // not be returned in the response.
+ DocumentMask mask = 3;
+
+ // The consistency mode for this transaction.
+ // If not set, defaults to strong consistency.
+ oneof consistency_selector {
+ // Reads documents in a transaction.
+ bytes transaction = 4;
+
+ // Starts a new transaction and reads the documents.
+ // Defaults to a read-only transaction.
+ // The new transaction ID will be returned as the first response in the
+ // stream.
+ TransactionOptions new_transaction = 5;
+
+ // Reads documents as they were at the given time.
+ // This may not be older than 60 seconds.
+ google.protobuf.Timestamp read_time = 7;
+ }
+}
+
+// The streamed response for [Firestore.BatchGetDocuments][google.firestore.v1beta1.Firestore.BatchGetDocuments].
+message BatchGetDocumentsResponse {
+ // A single result.
+ // This can be empty if the server is just returning a transaction.
+ oneof result {
+ // A document that was requested.
+ Document found = 1;
+
+ // A document name that was requested but does not exist. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ string missing = 2;
+ }
+
+ // The transaction that was started as part of this request.
+ // Will only be set in the first response, and only if
+ // [BatchGetDocumentsRequest.new_transaction][google.firestore.v1beta1.BatchGetDocumentsRequest.new_transaction] was set in the request.
+ bytes transaction = 3;
+
+ // The time at which the document was read.
+ // This may be monotically increasing, in this case the previous documents in
+ // the result stream are guaranteed not to have changed between their
+ // read_time and this one.
+ google.protobuf.Timestamp read_time = 4;
+}
+
+// The request for [Firestore.BeginTransaction][google.firestore.v1beta1.Firestore.BeginTransaction].
+message BeginTransactionRequest {
+ // The database name. In the format:
+ // `projects/{project_id}/databases/{database_id}`.
+ string database = 1;
+
+ // The options for the transaction.
+ // Defaults to a read-write transaction.
+ TransactionOptions options = 2;
+}
+
+// The response for [Firestore.BeginTransaction][google.firestore.v1beta1.Firestore.BeginTransaction].
+message BeginTransactionResponse {
+ // The transaction that was started.
+ bytes transaction = 1;
+}
+
+// The request for [Firestore.Commit][google.firestore.v1beta1.Firestore.Commit].
+message CommitRequest {
+ // The database name. In the format:
+ // `projects/{project_id}/databases/{database_id}`.
+ string database = 1;
+
+ // The writes to apply.
+ //
+ // Always executed atomically and in order.
+ repeated Write writes = 2;
+
+ // If non-empty, applies all writes in this transaction, and commits it.
+ // Otherwise, applies the writes as if they were in their own transaction.
+ bytes transaction = 3;
+}
+
+// The response for [Firestore.Commit][google.firestore.v1beta1.Firestore.Commit].
+message CommitResponse {
+ // The result of applying the writes.
+ //
+ // This i-th write result corresponds to the i-th write in the
+ // request.
+ repeated WriteResult write_results = 1;
+
+ // The time at which the commit occurred.
+ google.protobuf.Timestamp commit_time = 2;
+}
+
+// The request for [Firestore.Rollback][google.firestore.v1beta1.Firestore.Rollback].
+message RollbackRequest {
+ // The database name. In the format:
+ // `projects/{project_id}/databases/{database_id}`.
+ string database = 1;
+
+ // The transaction to roll back.
+ bytes transaction = 2;
+}
+
+// The request for [Firestore.RunQuery][google.firestore.v1beta1.Firestore.RunQuery].
+message RunQueryRequest {
+ // The parent resource name. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents` or
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ // For example:
+ // `projects/my-project/databases/my-database/documents` or
+ // `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`
+ string parent = 1;
+
+ // The query to run.
+ oneof query_type {
+ // A structured query.
+ StructuredQuery structured_query = 2;
+ }
+
+ // The consistency mode for this transaction.
+ // If not set, defaults to strong consistency.
+ oneof consistency_selector {
+ // Reads documents in a transaction.
+ bytes transaction = 5;
+
+ // Starts a new transaction and reads the documents.
+ // Defaults to a read-only transaction.
+ // The new transaction ID will be returned as the first response in the
+ // stream.
+ TransactionOptions new_transaction = 6;
+
+ // Reads documents as they were at the given time.
+ // This may not be older than 60 seconds.
+ google.protobuf.Timestamp read_time = 7;
+ }
+}
+
+// The response for [Firestore.RunQuery][google.firestore.v1beta1.Firestore.RunQuery].
+message RunQueryResponse {
+ // The transaction that was started as part of this request.
+ // Can only be set in the first response, and only if
+ // [RunQueryRequest.new_transaction][google.firestore.v1beta1.RunQueryRequest.new_transaction] was set in the request.
+ // If set, no other fields will be set in this response.
+ bytes transaction = 2;
+
+ // A query result.
+ // Not set when reporting partial progress.
+ Document document = 1;
+
+ // The time at which the document was read. This may be monotonically
+ // increasing; in this case, the previous documents in the result stream are
+ // guaranteed not to have changed between their `read_time` and this one.
+ //
+ // If the query returns no results, a response with `read_time` and no
+ // `document` will be sent, and this represents the time at which the query
+ // was run.
+ google.protobuf.Timestamp read_time = 3;
+
+ // The number of results that have been skipped due to an offset between
+ // the last response and the current response.
+ int32 skipped_results = 4;
+}
+
+// The request for [Firestore.Write][google.firestore.v1beta1.Firestore.Write].
+//
+// The first request creates a stream, or resumes an existing one from a token.
+//
+// When creating a new stream, the server replies with a response containing
+// only an ID and a token, to use in the next request.
+//
+// When resuming a stream, the server first streams any responses later than the
+// given token, then a response containing only an up-to-date token, to use in
+// the next request.
+message WriteRequest {
+ // The database name. In the format:
+ // `projects/{project_id}/databases/{database_id}`.
+ // This is only required in the first message.
+ string database = 1;
+
+ // The ID of the write stream to resume.
+ // This may only be set in the first message. When left empty, a new write
+ // stream will be created.
+ string stream_id = 2;
+
+ // The writes to apply.
+ //
+ // Always executed atomically and in order.
+ // This must be empty on the first request.
+ // This may be empty on the last request.
+ // This must not be empty on all other requests.
+ repeated Write writes = 3;
+
+ // A stream token that was previously sent by the server.
+ //
+ // The client should set this field to the token from the most recent
+ // [WriteResponse][google.firestore.v1beta1.WriteResponse] it has received. This acknowledges that the client has
+ // received responses up to this token. After sending this token, earlier
+ // tokens may not be used anymore.
+ //
+ // The server may close the stream if there are too many unacknowledged
+ // responses.
+ //
+ // Leave this field unset when creating a new stream. To resume a stream at
+ // a specific point, set this field and the `stream_id` field.
+ //
+ // Leave this field unset when creating a new stream.
+ bytes stream_token = 4;
+
+ // Labels associated with this write request.
+ map<string, string> labels = 5;
+}
+
+// The response for [Firestore.Write][google.firestore.v1beta1.Firestore.Write].
+message WriteResponse {
+ // The ID of the stream.
+ // Only set on the first message, when a new stream was created.
+ string stream_id = 1;
+
+ // A token that represents the position of this response in the stream.
+ // This can be used by a client to resume the stream at this point.
+ //
+ // This field is always set.
+ bytes stream_token = 2;
+
+ // The result of applying the writes.
+ //
+ // This i-th write result corresponds to the i-th write in the
+ // request.
+ repeated WriteResult write_results = 3;
+
+ // The time at which the commit occurred.
+ google.protobuf.Timestamp commit_time = 4;
+}
+
+// A request for [Firestore.Listen][google.firestore.v1beta1.Firestore.Listen]
+message ListenRequest {
+ // The database name. In the format:
+ // `projects/{project_id}/databases/{database_id}`.
+ string database = 1;
+
+ // The supported target changes.
+ oneof target_change {
+ // A target to add to this stream.
+ Target add_target = 2;
+
+ // The ID of a target to remove from this stream.
+ int32 remove_target = 3;
+ }
+
+ // Labels associated with this target change.
+ map<string, string> labels = 4;
+}
+
+// The response for [Firestore.Listen][google.firestore.v1beta1.Firestore.Listen].
+message ListenResponse {
+ // The supported responses.
+ oneof response_type {
+ // Targets have changed.
+ TargetChange target_change = 2;
+
+ // A [Document][google.firestore.v1beta1.Document] has changed.
+ DocumentChange document_change = 3;
+
+ // A [Document][google.firestore.v1beta1.Document] has been deleted.
+ DocumentDelete document_delete = 4;
+
+ // A [Document][google.firestore.v1beta1.Document] has been removed from a target (because it is no longer
+ // relevant to that target).
+ DocumentRemove document_remove = 6;
+
+ // A filter to apply to the set of documents previously returned for the
+ // given target.
+ //
+ // Returned when documents may have been removed from the given target, but
+ // the exact documents are unknown.
+ ExistenceFilter filter = 5;
+ }
+}
+
+// A specification of a set of documents to listen to.
+message Target {
+ // A target specified by a set of documents names.
+ message DocumentsTarget {
+ // The names of the documents to retrieve. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ // The request will fail if any of the document is not a child resource of
+ // the given `database`. Duplicate names will be elided.
+ repeated string documents = 2;
+ }
+
+ // A target specified by a query.
+ message QueryTarget {
+ // The parent resource name. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents` or
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ // For example:
+ // `projects/my-project/databases/my-database/documents` or
+ // `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`
+ string parent = 1;
+
+ // The query to run.
+ oneof query_type {
+ // A structured query.
+ StructuredQuery structured_query = 2;
+ }
+ }
+
+ // The type of target to listen to.
+ oneof target_type {
+ // A target specified by a query.
+ QueryTarget query = 2;
+
+ // A target specified by a set of document names.
+ DocumentsTarget documents = 3;
+ }
+
+ // When to start listening.
+ //
+ // If not specified, all matching Documents are returned before any
+ // subsequent changes.
+ oneof resume_type {
+ // A resume token from a prior [TargetChange][google.firestore.v1beta1.TargetChange] for an identical target.
+ //
+ // Using a resume token with a different target is unsupported and may fail.
+ bytes resume_token = 4;
+
+ // Start listening after a specific `read_time`.
+ //
+ // The client must know the state of matching documents at this time.
+ google.protobuf.Timestamp read_time = 11;
+ }
+
+ // A client provided target ID.
+ //
+ // If not set, the server will assign an ID for the target.
+ //
+ // Used for resuming a target without changing IDs. The IDs can either be
+ // client-assigned or be server-assigned in a previous stream. All targets
+ // with client provided IDs must be added before adding a target that needs
+ // a server-assigned id.
+ int32 target_id = 5;
+
+ // If the target should be removed once it is current and consistent.
+ bool once = 6;
+}
+
+// Targets being watched have changed.
+message TargetChange {
+ // The type of change.
+ enum TargetChangeType {
+ // No change has occurred. Used only to send an updated `resume_token`.
+ NO_CHANGE = 0;
+
+ // The targets have been added.
+ ADD = 1;
+
+ // The targets have been removed.
+ REMOVE = 2;
+
+ // The targets reflect all changes committed before the targets were added
+ // to the stream.
+ //
+ // This will be sent after or with a `read_time` that is greater than or
+ // equal to the time at which the targets were added.
+ //
+ // Listeners can wait for this change if read-after-write semantics
+ // are desired.
+ CURRENT = 3;
+
+ // The targets have been reset, and a new initial state for the targets
+ // will be returned in subsequent changes.
+ //
+ // After the initial state is complete, `CURRENT` will be returned even
+ // if the target was previously indicated to be `CURRENT`.
+ RESET = 4;
+ }
+
+ // The type of change that occurred.
+ TargetChangeType target_change_type = 1;
+
+ // The target IDs of targets that have changed.
+ //
+ // If empty, the change applies to all targets.
+ //
+ // For `target_change_type=ADD`, the order of the target IDs matches the order
+ // of the requests to add the targets. This allows clients to unambiguously
+ // associate server-assigned target IDs with added targets.
+ //
+ // For other states, the order of the target IDs is not defined.
+ repeated int32 target_ids = 2;
+
+ // The error that resulted in this change, if applicable.
+ google.rpc.Status cause = 3;
+
+ // A token that can be used to resume the stream for the given `target_ids`,
+ // or all targets if `target_ids` is empty.
+ //
+ // Not set on every target change.
+ bytes resume_token = 4;
+
+ // The consistent `read_time` for the given `target_ids` (omitted when the
+ // target_ids are not at a consistent snapshot).
+ //
+ // The stream is guaranteed to send a `read_time` with `target_ids` empty
+ // whenever the entire stream reaches a new consistent snapshot. ADD,
+ // CURRENT, and RESET messages are guaranteed to (eventually) result in a
+ // new consistent snapshot (while NO_CHANGE and REMOVE messages are not).
+ //
+ // For a given stream, `read_time` is guaranteed to be monotonically
+ // increasing.
+ google.protobuf.Timestamp read_time = 6;
+}
+
+// The request for [Firestore.ListCollectionIds][google.firestore.v1beta1.Firestore.ListCollectionIds].
+message ListCollectionIdsRequest {
+ // The parent document. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ // For example:
+ // `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`
+ string parent = 1;
+
+ // The maximum number of results to return.
+ int32 page_size = 2;
+
+ // A page token. Must be a value from
+ // [ListCollectionIdsResponse][google.firestore.v1beta1.ListCollectionIdsResponse].
+ string page_token = 3;
+}
+
+// The response from [Firestore.ListCollectionIds][google.firestore.v1beta1.Firestore.ListCollectionIds].
+message ListCollectionIdsResponse {
+ // The collection ids.
+ repeated string collection_ids = 1;
+
+ // A page token that may be used to continue the list.
+ string next_page_token = 2;
+}
diff --git a/Firestore/Protos/protos/google/firestore/v1beta1/query.proto b/Firestore/Protos/protos/google/firestore/v1beta1/query.proto
new file mode 100644
index 0000000..d19b022
--- /dev/null
+++ b/Firestore/Protos/protos/google/firestore/v1beta1/query.proto
@@ -0,0 +1,231 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.firestore.v1beta1;
+
+import "google/api/annotations.proto";
+import "google/firestore/v1beta1/document.proto";
+import "google/protobuf/wrappers.proto";
+
+option csharp_namespace = "Google.Cloud.Firestore.V1Beta1";
+option go_package = "google.golang.org/genproto/googleapis/firestore/v1beta1;firestore";
+option java_multiple_files = true;
+option java_outer_classname = "QueryProto";
+option java_package = "com.google.firestore.v1beta1";
+option objc_class_prefix = "GCFS";
+
+
+// A Firestore query.
+message StructuredQuery {
+ // A selection of a collection, such as `messages as m1`.
+ message CollectionSelector {
+ // The collection ID.
+ // When set, selects only collections with this ID.
+ string collection_id = 2;
+
+ // When false, selects only collections that are immediate children of
+ // the `parent` specified in the containing `RunQueryRequest`.
+ // When true, selects all descendant collections.
+ bool all_descendants = 3;
+ }
+
+ // A filter.
+ message Filter {
+ // The type of filter.
+ oneof filter_type {
+ // A composite filter.
+ CompositeFilter composite_filter = 1;
+
+ // A filter on a document field.
+ FieldFilter field_filter = 2;
+
+ // A filter that takes exactly one argument.
+ UnaryFilter unary_filter = 3;
+ }
+ }
+
+ // A filter that merges multiple other filters using the given operator.
+ message CompositeFilter {
+ // A composite filter operator.
+ enum Operator {
+ // Unspecified. This value must not be used.
+ OPERATOR_UNSPECIFIED = 0;
+
+ // The results are required to satisfy each of the combined filters.
+ AND = 1;
+ }
+
+ // The operator for combining multiple filters.
+ Operator op = 1;
+
+ // The list of filters to combine.
+ // Must contain at least one filter.
+ repeated Filter filters = 2;
+ }
+
+ // A filter on a specific field.
+ message FieldFilter {
+ // A field filter operator.
+ enum Operator {
+ // Unspecified. This value must not be used.
+ OPERATOR_UNSPECIFIED = 0;
+
+ // Less than. Requires that the field come first in `order_by`.
+ LESS_THAN = 1;
+
+ // Less than or equal. Requires that the field come first in `order_by`.
+ LESS_THAN_OR_EQUAL = 2;
+
+ // Greater than. Requires that the field come first in `order_by`.
+ GREATER_THAN = 3;
+
+ // Greater than or equal. Requires that the field come first in
+ // `order_by`.
+ GREATER_THAN_OR_EQUAL = 4;
+
+ // Equal.
+ EQUAL = 5;
+ }
+
+ // The field to filter by.
+ FieldReference field = 1;
+
+ // The operator to filter by.
+ Operator op = 2;
+
+ // The value to compare to.
+ Value value = 3;
+ }
+
+ // A filter with a single operand.
+ message UnaryFilter {
+ // A unary operator.
+ enum Operator {
+ // Unspecified. This value must not be used.
+ OPERATOR_UNSPECIFIED = 0;
+
+ // Test if a field is equal to NaN.
+ IS_NAN = 2;
+
+ // Test if an exprestion evaluates to Null.
+ IS_NULL = 3;
+ }
+
+ // The unary operator to apply.
+ Operator op = 1;
+
+ // The argument to the filter.
+ oneof operand_type {
+ // The field to which to apply the operator.
+ FieldReference field = 2;
+ }
+ }
+
+ // An order on a field.
+ message Order {
+ // The field to order by.
+ FieldReference field = 1;
+
+ // The direction to order by. Defaults to `ASCENDING`.
+ Direction direction = 2;
+ }
+
+ // A reference to a field, such as `max(messages.time) as max_time`.
+ message FieldReference {
+ string field_path = 2;
+ }
+
+ // The projection of document's fields to return.
+ message Projection {
+ // The fields to return.
+ //
+ // If empty, all fields are returned. To only return the name
+ // of the document, use `['__name__']`.
+ repeated FieldReference fields = 2;
+ }
+
+ // A sort direction.
+ enum Direction {
+ // Unspecified.
+ DIRECTION_UNSPECIFIED = 0;
+
+ // Ascending.
+ ASCENDING = 1;
+
+ // Descending.
+ DESCENDING = 2;
+ }
+
+ // The projection to return.
+ Projection select = 1;
+
+ // The collections to query.
+ repeated CollectionSelector from = 2;
+
+ // The filter to apply.
+ Filter where = 3;
+
+ // The order to apply to the query results.
+ //
+ // Firestore guarantees a stable ordering through the following rules:
+ //
+ // * Any field required to appear in `order_by`, that is not already
+ // specified in `order_by`, is appended to the order in field name order
+ // by default.
+ // * If an order on `__name__` is not specified, it is appended by default.
+ //
+ // Fields are appended with the same sort direction as the last order
+ // specified, or 'ASCENDING' if no order was specified. For example:
+ //
+ // * `SELECT * FROM Foo ORDER BY A` becomes
+ // `SELECT * FROM Foo ORDER BY A, __name__`
+ // * `SELECT * FROM Foo ORDER BY A DESC` becomes
+ // `SELECT * FROM Foo ORDER BY A DESC, __name__ DESC`
+ // * `SELECT * FROM Foo WHERE A > 1` becomes
+ // `SELECT * FROM Foo WHERE A > 1 ORDER BY A, __name__`
+ repeated Order order_by = 4;
+
+ // A starting point for the query results.
+ Cursor start_at = 7;
+
+ // A end point for the query results.
+ Cursor end_at = 8;
+
+ // The number of results to skip.
+ //
+ // Applies before limit, but after all other constraints. Must be >= 0 if
+ // specified.
+ int32 offset = 6;
+
+ // The maximum number of results to return.
+ //
+ // Applies after all other constraints.
+ // Must be >= 0 if specified.
+ google.protobuf.Int32Value limit = 5;
+}
+
+// A position in a query result set.
+message Cursor {
+ // The values that represent a position, in the order they appear in
+ // the order by clause of a query.
+ //
+ // Can contain fewer values than specified in the order by clause.
+ repeated Value values = 1;
+
+ // If the position is just before or just after the given values, relative
+ // to the sort order defined by the query.
+ bool before = 2;
+}
diff --git a/Firestore/Protos/protos/google/firestore/v1beta1/write.proto b/Firestore/Protos/protos/google/firestore/v1beta1/write.proto
new file mode 100644
index 0000000..b6e9d5f
--- /dev/null
+++ b/Firestore/Protos/protos/google/firestore/v1beta1/write.proto
@@ -0,0 +1,189 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.firestore.v1beta1;
+
+import "google/api/annotations.proto";
+import "google/firestore/v1beta1/common.proto";
+import "google/firestore/v1beta1/document.proto";
+import "google/protobuf/timestamp.proto";
+
+option csharp_namespace = "Google.Cloud.Firestore.V1Beta1";
+option go_package = "google.golang.org/genproto/googleapis/firestore/v1beta1;firestore";
+option java_multiple_files = true;
+option java_outer_classname = "WriteProto";
+option java_package = "com.google.firestore.v1beta1";
+option objc_class_prefix = "GCFS";
+
+
+// A write on a document.
+message Write {
+ // The operation to execute.
+ oneof operation {
+ // A document to write.
+ Document update = 1;
+
+ // A document name to delete. In the format:
+ // `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
+ string delete = 2;
+
+ // The name of a document on which to verify the `current_document`
+ // precondition.
+ // This only requires read access to the document.
+ string verify = 5;
+
+ // Applies a tranformation to a document.
+ // At most one `transform` per document is allowed in a given request.
+ // An `update` cannot follow a `transform` on the same document in a given
+ // request.
+ DocumentTransform transform = 6;
+ }
+
+ // The fields to update in this write.
+ //
+ // This field can be set only when the operation is `update`.
+ // None of the field paths in the mask may contain a reserved name.
+ // If the document exists on the server and has fields not referenced in the
+ // mask, they are left unchanged.
+ // Fields referenced in the mask, but not present in the input document, are
+ // deleted from the document on the server.
+ // The field paths in this mask must not contain a reserved field name.
+ DocumentMask update_mask = 3;
+
+ // An optional precondition on the document.
+ //
+ // The write will fail if this is set and not met by the target document.
+ Precondition current_document = 4;
+}
+
+// A transformation of a document.
+message DocumentTransform {
+ // A transformation of a field of the document.
+ message FieldTransform {
+ // A value that is calculated by the server.
+ enum ServerValue {
+ // Unspecified. This value must not be used.
+ SERVER_VALUE_UNSPECIFIED = 0;
+
+ // The time at which the server processed the request.
+ REQUEST_TIME = 1;
+ }
+
+ // The path of the field. See [Document.fields][google.firestore.v1beta1.Document.fields] for the field path syntax
+ // reference.
+ string field_path = 1;
+
+ // The transformation to apply on the field.
+ oneof transform_type {
+ // Sets the field to the given server value.
+ ServerValue set_to_server_value = 2;
+ }
+ }
+
+ // The name of the document to transform.
+ string document = 1;
+
+ // The list of transformations to apply to the fields of the document, in
+ // order.
+ repeated FieldTransform field_transforms = 2;
+}
+
+// The result of applying a write.
+message WriteResult {
+ // The last update time of the document after applying the write. Not set
+ // after a `delete`.
+ //
+ // If the write did not actually change the document, this will be the
+ // previous update_time.
+ google.protobuf.Timestamp update_time = 1;
+
+ // The results of applying each [DocumentTransform.FieldTransform][google.firestore.v1beta1.DocumentTransform.FieldTransform], in the
+ // same order.
+ repeated Value transform_results = 2;
+}
+
+// A [Document][google.firestore.v1beta1.Document] has changed.
+//
+// May be the result of multiple [writes][google.firestore.v1beta1.Write], including deletes, that
+// ultimately resulted in a new value for the [Document][google.firestore.v1beta1.Document].
+//
+// Multiple [DocumentChange][google.firestore.v1beta1.DocumentChange] messages may be returned for the same logical
+// change, if multiple targets are affected.
+message DocumentChange {
+ // The new state of the [Document][google.firestore.v1beta1.Document].
+ //
+ // If `mask` is set, contains only fields that were updated or added.
+ Document document = 1;
+
+ // A set of target IDs of targets that match this document.
+ repeated int32 target_ids = 5;
+
+ // A set of target IDs for targets that no longer match this document.
+ repeated int32 removed_target_ids = 6;
+}
+
+// A [Document][google.firestore.v1beta1.Document] has been deleted.
+//
+// May be the result of multiple [writes][google.firestore.v1beta1.Write], including updates, the
+// last of which deleted the [Document][google.firestore.v1beta1.Document].
+//
+// Multiple [DocumentDelete][google.firestore.v1beta1.DocumentDelete] messages may be returned for the same logical
+// delete, if multiple targets are affected.
+message DocumentDelete {
+ // The resource name of the [Document][google.firestore.v1beta1.Document] that was deleted.
+ string document = 1;
+
+ // A set of target IDs for targets that previously matched this entity.
+ repeated int32 removed_target_ids = 6;
+
+ // The read timestamp at which the delete was observed.
+ //
+ // Greater or equal to the `commit_time` of the delete.
+ google.protobuf.Timestamp read_time = 4;
+}
+
+// A [Document][google.firestore.v1beta1.Document] has been removed from the view of the targets.
+//
+// Sent if the document is no longer relevant to a target and is out of view.
+// Can be sent instead of a DocumentDelete or a DocumentChange if the server
+// can not send the new value of the document.
+//
+// Multiple [DocumentRemove][google.firestore.v1beta1.DocumentRemove] messages may be returned for the same logical
+// write or delete, if multiple targets are affected.
+message DocumentRemove {
+ // The resource name of the [Document][google.firestore.v1beta1.Document] that has gone out of view.
+ string document = 1;
+
+ // A set of target IDs for targets that previously matched this document.
+ repeated int32 removed_target_ids = 2;
+
+ // The read timestamp at which the remove was observed.
+ //
+ // Greater or equal to the `commit_time` of the change/delete/remove.
+ google.protobuf.Timestamp read_time = 4;
+}
+
+// A digest of all the documents that match a given target.
+message ExistenceFilter {
+ // The target ID to which this filter applies.
+ int32 target_id = 1;
+
+ // The total count of documents that match [target_id][google.firestore.v1beta1.ExistenceFilter.target_id].
+ //
+ // If different from the count of documents in the client that match, the
+ // client must manually determine which documents no longer match the target.
+ int32 count = 2;
+}