From 50f38b22157c38be2d5e77147b950d6f86a7b431 Mon Sep 17 00:00:00 2001 From: Adrian Tam Date: Tue, 3 Dec 2024 09:05:23 -0500 Subject: [PATCH] feat: allow upsert for write --- docs/openapiv2/apidocs.swagger.json | 14 + openfga/v1/openfga_service.proto | 4 + openfga/v1/openfga_upsert.proto | 13 + proto/openfga/v1/openfga_service.pb.go | 699 +++++++++--------- .../openfga/v1/openfga_service.pb.validate.go | 11 + proto/openfga/v1/openfga_upsert.pb.go | 147 ++++ .../openfga/v1/openfga_upsert.pb.validate.go | 36 + 7 files changed, 584 insertions(+), 340 deletions(-) create mode 100644 openfga/v1/openfga_upsert.proto create mode 100644 proto/openfga/v1/openfga_upsert.pb.go create mode 100644 proto/openfga/v1/openfga_upsert.pb.validate.go diff --git a/docs/openapiv2/apidocs.swagger.json b/docs/openapiv2/apidocs.swagger.json index 28dcc35..18974a4 100644 --- a/docs/openapiv2/apidocs.swagger.json +++ b/docs/openapiv2/apidocs.swagger.json @@ -1647,6 +1647,10 @@ "authorization_model_id": { "type": "string", "example": "01G5JAVJ41T49E9TT3SKVS7X1J" + }, + "upsertAllowed": { + "$ref": "#/definitions/UpsertPreference", + "description": "Controls whether insert only or allow upsert. Default value is UPSERT_UNSPECIFIED, which will have the same behavior as INSERT_ONLY." } } } @@ -2865,6 +2869,16 @@ } } }, + "UpsertPreference": { + "type": "string", + "enum": [ + "UPSERT_UNSPECIFIED", + "INSERT_ONLY", + "ALLOW_UPSERT" + ], + "default": "UPSERT_UNSPECIFIED", + "description": "Controls whether duplicate is allowed.\n\n - UPSERT_UNSPECIFIED: Default if not set. Behavior will be the same as INSERT_ONLY.\n - INSERT_ONLY: Write failed when there are duplicate entry.\n - ALLOW_UPSERT: Upsert when there are existing entry." + }, "User": { "type": "object", "properties": { diff --git a/openfga/v1/openfga_service.proto b/openfga/v1/openfga_service.proto index 7ed480e..3f2ef2b 100644 --- a/openfga/v1/openfga_service.proto +++ b/openfga/v1/openfga_service.proto @@ -12,6 +12,7 @@ import "openfga/v1/authzmodel.proto"; import "openfga/v1/errors_ignore.proto"; import "openfga/v1/openfga.proto"; import "openfga/v1/openfga_service_consistency.proto"; +import "openfga/v1/openfga_upsert.proto"; import "protoc-gen-openapiv2/options/annotations.proto"; import "validate/validate.proto"; @@ -1162,6 +1163,9 @@ message WriteRequest { }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"01G5JAVJ41T49E9TT3SKVS7X1J\""} ]; + + // Controls whether insert only or allow upsert. Default value is UPSERT_UNSPECIFIED, which will have the same behavior as INSERT_ONLY. + UpsertPreference upsert_allowed = 5 [(validate.rules).enum.defined_only = true]; } message WriteResponse {} diff --git a/openfga/v1/openfga_upsert.proto b/openfga/v1/openfga_upsert.proto new file mode 100644 index 0000000..d532df7 --- /dev/null +++ b/openfga/v1/openfga_upsert.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; + +package openfga.v1; + +// Controls whether duplicate is allowed. +enum UpsertPreference { + // Default if not set. Behavior will be the same as INSERT_ONLY. + UPSERT_UNSPECIFIED = 0; + // Write failed when there are duplicate entry. + INSERT_ONLY = 100; + // Upsert when there are existing entry. + ALLOW_UPSERT = 200; +} diff --git a/proto/openfga/v1/openfga_service.pb.go b/proto/openfga/v1/openfga_service.pb.go index 51c695e..2d5c61d 100644 --- a/proto/openfga/v1/openfga_service.pb.go +++ b/proto/openfga/v1/openfga_service.pb.go @@ -788,6 +788,8 @@ type WriteRequest struct { Writes *WriteRequestWrites `protobuf:"bytes,2,opt,name=writes,proto3" json:"writes,omitempty"` Deletes *WriteRequestDeletes `protobuf:"bytes,3,opt,name=deletes,proto3" json:"deletes,omitempty"` AuthorizationModelId string `protobuf:"bytes,4,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + // Controls whether insert only or allow upsert. Default value is UPSERT_UNSPECIFIED, which will have the same behavior as INSERT_ONLY. + UpsertAllowed UpsertPreference `protobuf:"varint,5,opt,name=upsert_allowed,json=upsertAllowed,proto3,enum=openfga.v1.UpsertPreference" json:"upsert_allowed,omitempty"` } func (x *WriteRequest) Reset() { @@ -850,6 +852,13 @@ func (x *WriteRequest) GetAuthorizationModelId() string { return "" } +func (x *WriteRequest) GetUpsertAllowed() UpsertPreference { + if x != nil { + return x.UpsertAllowed + } + return UpsertPreference_UPSERT_UNSPECIFIED +} + type WriteResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3103,148 +3112,104 @@ var file_openfga_v1_openfga_service_proto_rawDesc = []byte{ 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x91, 0x05, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, - 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x49, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, - 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, - 0x35, 0x58, 0x22, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, - 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, - 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, - 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, - 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, 0x26, 0x32, 0x21, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, + 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, + 0x67, 0x61, 0x5f, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x91, 0x05, 0x0a, 0x12, 0x4c, 0x69, 0x73, + 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x65, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x49, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, + 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, + 0x45, 0x35, 0x58, 0x22, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, + 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, + 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, 0x26, 0x32, + 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, + 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, + 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0x3e, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0x92, 0x41, 0x0c, + 0x4a, 0x0a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, + 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, + 0x31, 0x2c, 0x32, 0x35, 0x34, 0x7d, 0x24, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, + 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x27, 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xe0, 0x41, + 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, + 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x23, 0x92, 0x41, 0x13, 0x4a, 0x0b, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, + 0x65, 0x22, 0x78, 0x80, 0x04, 0x80, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x72, 0x05, + 0x20, 0x01, 0x28, 0x80, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x11, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, + 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, + 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x61, 0x0a, 0x13, + 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x42, 0x30, 0x92, 0x41, 0x2a, 0x4a, 0x28, 0x5b, 0x22, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0x2c, 0x22, + 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x69, 0x6e, + 0x67, 0x22, 0x5d, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, + 0xc2, 0x06, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x49, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, + 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, + 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, - 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0x92, 0x41, 0x0c, 0x4a, - 0x0a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, - 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, - 0x2c, 0x32, 0x35, 0x34, 0x7d, 0x24, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x08, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, - 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xe0, 0x41, 0x02, - 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, - 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x23, 0x92, 0x41, 0x13, 0x4a, 0x0b, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, - 0x22, 0x78, 0x80, 0x04, 0x80, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x20, - 0x01, 0x28, 0x80, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x11, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, - 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, 0x0b, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x61, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x30, 0x92, 0x41, 0x2a, 0x4a, 0x28, 0x5b, 0x22, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0x2c, 0x22, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x67, - 0x22, 0x5d, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0xc2, - 0x06, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x49, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, - 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, - 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, - 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, - 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, - 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, - 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, - 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, - 0x28, 0x72, 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, - 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, - 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x22, 0x92, 0x41, 0x14, 0x4a, 0x12, 0x22, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x22, 0xe0, 0x41, - 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, - 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x08, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xd4, 0x01, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, - 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x93, 0x01, 0x92, 0x41, 0x82, 0x01, - 0x32, 0x3d, 0x54, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x20, - 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x20, 0x65, 0x78, 0x61, - 0x63, 0x74, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x4a, - 0x3b, 0x5b, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, - 0x22, 0x7d, 0x2c, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x22, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x3a, 0x20, 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x7d, 0x5d, 0xa0, 0x01, 0x01, 0xa8, - 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, - 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x52, 0x0a, - 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0e, - 0x92, 0x41, 0x03, 0xa0, 0x01, 0x64, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x10, 0x64, 0x52, 0x11, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x63, 0x79, 0x22, 0x43, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x42, 0x06, 0x92, 0x41, 0x00, 0xe0, 0x41, - 0x02, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x99, 0x05, 0x0a, 0x1a, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x49, 0x92, 0x41, 0x1e, 0x4a, 0x1c, - 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, - 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xfa, 0x42, 0x25, 0x72, - 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, - 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, - 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, - 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, - 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, - 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, - 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x2a, 0x92, 0x41, 0x0c, 0x4a, 0x0a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, - 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, 0x35, 0x34, 0x7d, 0x24, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x72, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, - 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, - 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x23, 0x92, 0x41, 0x13, 0x4a, 0x0b, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, 0x04, 0x80, 0x01, 0x01, - 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x20, 0x01, 0x28, 0x80, 0x04, 0x52, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, - 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, + 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x16, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, + 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, + 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, + 0x42, 0x28, 0x72, 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, + 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, + 0x69, 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x22, 0x92, 0x41, 0x14, 0x4a, 0x12, 0x22, 0x64, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x22, 0xe0, + 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, + 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x08, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xd4, 0x01, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x93, 0x01, 0x92, 0x41, 0x82, + 0x01, 0x32, 0x3d, 0x54, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, + 0x20, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x20, 0x65, 0x78, + 0x61, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, + 0x4a, 0x3b, 0x5b, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, + 0x72, 0x22, 0x7d, 0x2c, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x3a, 0x20, 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x7d, 0x5d, 0xa0, 0x01, 0x01, + 0xa8, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, + 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x52, + 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, + 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x42, + 0x0e, 0x92, 0x41, 0x03, 0xa0, 0x01, 0x64, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x10, 0x64, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, @@ -3254,113 +3219,164 @@ var file_openfga_v1_openfga_service_proto_rawDesc = []byte{ 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x22, 0x51, 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, - 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x14, 0x4a, 0x12, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x3a, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0xe0, 0x41, 0x02, 0x52, - 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x86, 0x04, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, - 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, - 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, - 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x12, 0x5d, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x22, 0x92, 0x41, 0x16, 0x4a, 0x02, 0x35, 0x30, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x59, 0x40, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0xfa, 0x42, 0x06, 0x1a, 0x04, - 0x18, 0x64, 0x28, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, - 0x9f, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x6f, 0x92, 0x41, - 0x64, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, - 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, - 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, - 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, - 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, - 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, - 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x28, 0x80, 0x28, 0x52, 0x12, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, - 0x22, 0xdd, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0x92, 0x41, 0x10, 0x4a, 0x0b, 0x22, 0x75, 0x73, - 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, 0x04, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x28, 0x80, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x0c, - 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x78, 0x32, 0xfa, 0x42, 0x17, 0x72, - 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, - 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x36, 0x92, 0x41, 0x1b, 0x4a, 0x16, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x78, 0x80, 0x02, - 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x0e, 0x5e, 0x5b, 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x32, 0x2c, - 0x32, 0x35, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x22, 0xa8, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x75, 0x70, 0x6c, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x12, 0xe7, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb6, - 0x01, 0x92, 0x41, 0xa7, 0x01, 0x32, 0x41, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, - 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, - 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, - 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, - 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, - 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, - 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x05, 0x72, 0x03, 0x28, 0x80, 0x28, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5d, 0x0a, 0x12, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x11, 0x92, 0x41, 0x03, - 0xa8, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x6e, 0x0a, 0x13, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x73, 0x12, 0x57, 0x0a, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x6f, - 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x11, 0x92, 0x41, 0x03, - 0xa8, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xf2, 0x02, 0x0a, 0x0c, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, - 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, - 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, - 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, + 0x65, 0x6e, 0x63, 0x79, 0x22, 0x43, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x75, 0x73, 0x65, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, + 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x42, 0x06, 0x92, 0x41, 0x00, 0xe0, + 0x41, 0x02, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x99, 0x05, 0x0a, 0x1a, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x49, 0x92, 0x41, 0x1e, 0x4a, + 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, + 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xfa, 0x42, 0x25, + 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, + 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, + 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, + 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, + 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, + 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, - 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x73, 0x52, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x12, 0x39, 0x0a, - 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x52, - 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, - 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, - 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, - 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, - 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, - 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x22, + 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0x92, 0x41, 0x0c, 0x4a, 0x0a, 0x22, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, + 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, 0x35, 0x34, 0x7d, 0x24, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, + 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, + 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, + 0x24, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x23, 0x92, 0x41, 0x13, 0x4a, 0x0b, + 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, 0x04, 0x80, 0x01, + 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x20, 0x01, 0x28, 0x80, 0x04, 0x52, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, + 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, + 0x6c, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x51, 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, + 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x14, 0x4a, 0x12, 0x22, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0xe0, 0x41, 0x02, + 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x86, 0x04, 0x0a, 0x0b, 0x52, 0x65, 0x61, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, + 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, + 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, + 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, + 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, + 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x75, + 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, + 0x79, 0x12, 0x5d, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x22, 0x92, 0x41, 0x16, 0x4a, 0x02, 0x35, 0x30, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x59, 0x40, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0xfa, 0x42, 0x06, 0x1a, + 0x04, 0x18, 0x64, 0x28, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x12, 0x9f, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x6f, 0x92, + 0x41, 0x64, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, + 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, + 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, + 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, + 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, + 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, + 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x28, 0x80, 0x28, 0x52, 0x12, + 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, + 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, + 0x79, 0x22, 0xdd, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0x92, 0x41, 0x10, 0x4a, 0x0b, 0x22, 0x75, + 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, 0x04, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x28, 0x80, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, + 0x0c, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x78, 0x32, 0xfa, 0x42, 0x17, + 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, + 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x36, 0x92, 0x41, 0x1b, 0x4a, 0x16, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x78, 0x80, + 0x02, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x0e, 0x5e, 0x5b, 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x32, + 0x2c, 0x32, 0x35, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x22, 0xa8, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x75, 0x70, 0x6c, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, + 0x65, 0x73, 0x12, 0xe7, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0xb6, 0x01, 0x92, 0x41, 0xa7, 0x01, 0x32, 0x41, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, + 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, + 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, + 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, + 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, + 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, + 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, + 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xe0, 0x41, 0x02, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x28, 0x80, 0x28, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5d, 0x0a, 0x12, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x11, 0x92, 0x41, + 0x03, 0xa8, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, + 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x6e, 0x0a, 0x13, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x73, 0x12, 0x57, 0x0a, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, + 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x11, 0x92, 0x41, + 0x03, 0xa8, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, + 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xc1, 0x03, 0x0a, 0x0c, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, + 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, + 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, + 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x73, 0x52, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x12, 0x39, + 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, + 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, + 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, + 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, + 0x72, 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, + 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, + 0x7b, 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, + 0x12, 0x4d, 0x0a, 0x0e, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, + 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x0d, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0x0f, 0x0a, 0x0d, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc1, 0x04, 0x0a, 0x0c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, @@ -5763,15 +5779,16 @@ var file_openfga_v1_openfga_service_proto_goTypes = []interface{}{ (*wrapperspb.Int32Value)(nil), // 58: google.protobuf.Int32Value (*Tuple)(nil), // 59: openfga.v1.Tuple (*TupleKeyWithoutCondition)(nil), // 60: openfga.v1.TupleKeyWithoutCondition - (ErrorCode)(0), // 61: openfga.v1.ErrorCode - (InternalErrorCode)(0), // 62: openfga.v1.InternalErrorCode - (*UsersetTree)(nil), // 63: openfga.v1.UsersetTree - (*AuthorizationModel)(nil), // 64: openfga.v1.AuthorizationModel - (*TypeDefinition)(nil), // 65: openfga.v1.TypeDefinition - (*timestamppb.Timestamp)(nil), // 66: google.protobuf.Timestamp - (*TupleChange)(nil), // 67: openfga.v1.TupleChange - (*Store)(nil), // 68: openfga.v1.Store - (*Condition)(nil), // 69: openfga.v1.Condition + (UpsertPreference)(0), // 61: openfga.v1.UpsertPreference + (ErrorCode)(0), // 62: openfga.v1.ErrorCode + (InternalErrorCode)(0), // 63: openfga.v1.InternalErrorCode + (*UsersetTree)(nil), // 64: openfga.v1.UsersetTree + (*AuthorizationModel)(nil), // 65: openfga.v1.AuthorizationModel + (*TypeDefinition)(nil), // 66: openfga.v1.TypeDefinition + (*timestamppb.Timestamp)(nil), // 67: google.protobuf.Timestamp + (*TupleChange)(nil), // 68: openfga.v1.TupleChange + (*Store)(nil), // 69: openfga.v1.Store + (*Condition)(nil), // 70: openfga.v1.Condition } var file_openfga_v1_openfga_service_proto_depIdxs = []int32{ 51, // 0: openfga.v1.ListObjectsRequest.contextual_tuples:type_name -> openfga.v1.ContextualTupleKeys @@ -5794,91 +5811,92 @@ var file_openfga_v1_openfga_service_proto_depIdxs = []int32{ 60, // 17: openfga.v1.WriteRequestDeletes.tuple_keys:type_name -> openfga.v1.TupleKeyWithoutCondition 9, // 18: openfga.v1.WriteRequest.writes:type_name -> openfga.v1.WriteRequestWrites 10, // 19: openfga.v1.WriteRequest.deletes:type_name -> openfga.v1.WriteRequestDeletes - 14, // 20: openfga.v1.CheckRequest.tuple_key:type_name -> openfga.v1.CheckRequestTupleKey - 51, // 21: openfga.v1.CheckRequest.contextual_tuples:type_name -> openfga.v1.ContextualTupleKeys - 52, // 22: openfga.v1.CheckRequest.context:type_name -> google.protobuf.Struct - 53, // 23: openfga.v1.CheckRequest.consistency:type_name -> openfga.v1.ConsistencyPreference - 17, // 24: openfga.v1.BatchCheckRequest.checks:type_name -> openfga.v1.BatchCheckItem - 53, // 25: openfga.v1.BatchCheckRequest.consistency:type_name -> openfga.v1.ConsistencyPreference - 14, // 26: openfga.v1.BatchCheckItem.tuple_key:type_name -> openfga.v1.CheckRequestTupleKey - 51, // 27: openfga.v1.BatchCheckItem.contextual_tuples:type_name -> openfga.v1.ContextualTupleKeys - 52, // 28: openfga.v1.BatchCheckItem.context:type_name -> google.protobuf.Struct - 49, // 29: openfga.v1.BatchCheckResponse.result:type_name -> openfga.v1.BatchCheckResponse.ResultEntry - 20, // 30: openfga.v1.BatchCheckSingleResult.error:type_name -> openfga.v1.CheckError - 61, // 31: openfga.v1.CheckError.input_error:type_name -> openfga.v1.ErrorCode - 62, // 32: openfga.v1.CheckError.internal_error:type_name -> openfga.v1.InternalErrorCode - 22, // 33: openfga.v1.ExpandRequest.tuple_key:type_name -> openfga.v1.ExpandRequestTupleKey - 53, // 34: openfga.v1.ExpandRequest.consistency:type_name -> openfga.v1.ConsistencyPreference - 51, // 35: openfga.v1.ExpandRequest.contextual_tuples:type_name -> openfga.v1.ContextualTupleKeys - 63, // 36: openfga.v1.ExpandResponse.tree:type_name -> openfga.v1.UsersetTree - 64, // 37: openfga.v1.ReadAuthorizationModelResponse.authorization_model:type_name -> openfga.v1.AuthorizationModel - 65, // 38: openfga.v1.WriteAuthorizationModelRequest.type_definitions:type_name -> openfga.v1.TypeDefinition - 50, // 39: openfga.v1.WriteAuthorizationModelRequest.conditions:type_name -> openfga.v1.WriteAuthorizationModelRequest.ConditionsEntry - 58, // 40: openfga.v1.ReadAuthorizationModelsRequest.page_size:type_name -> google.protobuf.Int32Value - 64, // 41: openfga.v1.ReadAuthorizationModelsResponse.authorization_models:type_name -> openfga.v1.AuthorizationModel - 47, // 42: openfga.v1.WriteAssertionsRequest.assertions:type_name -> openfga.v1.Assertion - 47, // 43: openfga.v1.ReadAssertionsResponse.assertions:type_name -> openfga.v1.Assertion - 58, // 44: openfga.v1.ReadChangesRequest.page_size:type_name -> google.protobuf.Int32Value - 66, // 45: openfga.v1.ReadChangesRequest.start_time:type_name -> google.protobuf.Timestamp - 67, // 46: openfga.v1.ReadChangesResponse.changes:type_name -> openfga.v1.TupleChange - 66, // 47: openfga.v1.CreateStoreResponse.created_at:type_name -> google.protobuf.Timestamp - 66, // 48: openfga.v1.CreateStoreResponse.updated_at:type_name -> google.protobuf.Timestamp - 66, // 49: openfga.v1.UpdateStoreResponse.created_at:type_name -> google.protobuf.Timestamp - 66, // 50: openfga.v1.UpdateStoreResponse.updated_at:type_name -> google.protobuf.Timestamp - 66, // 51: openfga.v1.GetStoreResponse.created_at:type_name -> google.protobuf.Timestamp - 66, // 52: openfga.v1.GetStoreResponse.updated_at:type_name -> google.protobuf.Timestamp - 66, // 53: openfga.v1.GetStoreResponse.deleted_at:type_name -> google.protobuf.Timestamp - 58, // 54: openfga.v1.ListStoresRequest.page_size:type_name -> google.protobuf.Int32Value - 68, // 55: openfga.v1.ListStoresResponse.stores:type_name -> openfga.v1.Store - 46, // 56: openfga.v1.Assertion.tuple_key:type_name -> openfga.v1.AssertionTupleKey - 56, // 57: openfga.v1.Assertion.contextual_tuples:type_name -> openfga.v1.TupleKey - 52, // 58: openfga.v1.Assertion.context:type_name -> google.protobuf.Struct - 47, // 59: openfga.v1.Assertions.assertions:type_name -> openfga.v1.Assertion - 19, // 60: openfga.v1.BatchCheckResponse.ResultEntry.value:type_name -> openfga.v1.BatchCheckSingleResult - 69, // 61: openfga.v1.WriteAuthorizationModelRequest.ConditionsEntry.value:type_name -> openfga.v1.Condition - 6, // 62: openfga.v1.OpenFGAService.Read:input_type -> openfga.v1.ReadRequest - 11, // 63: openfga.v1.OpenFGAService.Write:input_type -> openfga.v1.WriteRequest - 13, // 64: openfga.v1.OpenFGAService.Check:input_type -> openfga.v1.CheckRequest - 16, // 65: openfga.v1.OpenFGAService.BatchCheck:input_type -> openfga.v1.BatchCheckRequest - 21, // 66: openfga.v1.OpenFGAService.Expand:input_type -> openfga.v1.ExpandRequest - 28, // 67: openfga.v1.OpenFGAService.ReadAuthorizationModels:input_type -> openfga.v1.ReadAuthorizationModelsRequest - 24, // 68: openfga.v1.OpenFGAService.ReadAuthorizationModel:input_type -> openfga.v1.ReadAuthorizationModelRequest - 26, // 69: openfga.v1.OpenFGAService.WriteAuthorizationModel:input_type -> openfga.v1.WriteAuthorizationModelRequest - 30, // 70: openfga.v1.OpenFGAService.WriteAssertions:input_type -> openfga.v1.WriteAssertionsRequest - 32, // 71: openfga.v1.OpenFGAService.ReadAssertions:input_type -> openfga.v1.ReadAssertionsRequest - 34, // 72: openfga.v1.OpenFGAService.ReadChanges:input_type -> openfga.v1.ReadChangesRequest - 36, // 73: openfga.v1.OpenFGAService.CreateStore:input_type -> openfga.v1.CreateStoreRequest - 38, // 74: openfga.v1.OpenFGAService.UpdateStore:input_type -> openfga.v1.UpdateStoreRequest - 40, // 75: openfga.v1.OpenFGAService.DeleteStore:input_type -> openfga.v1.DeleteStoreRequest - 42, // 76: openfga.v1.OpenFGAService.GetStore:input_type -> openfga.v1.GetStoreRequest - 44, // 77: openfga.v1.OpenFGAService.ListStores:input_type -> openfga.v1.ListStoresRequest - 4, // 78: openfga.v1.OpenFGAService.StreamedListObjects:input_type -> openfga.v1.StreamedListObjectsRequest - 0, // 79: openfga.v1.OpenFGAService.ListObjects:input_type -> openfga.v1.ListObjectsRequest - 2, // 80: openfga.v1.OpenFGAService.ListUsers:input_type -> openfga.v1.ListUsersRequest - 8, // 81: openfga.v1.OpenFGAService.Read:output_type -> openfga.v1.ReadResponse - 12, // 82: openfga.v1.OpenFGAService.Write:output_type -> openfga.v1.WriteResponse - 15, // 83: openfga.v1.OpenFGAService.Check:output_type -> openfga.v1.CheckResponse - 18, // 84: openfga.v1.OpenFGAService.BatchCheck:output_type -> openfga.v1.BatchCheckResponse - 23, // 85: openfga.v1.OpenFGAService.Expand:output_type -> openfga.v1.ExpandResponse - 29, // 86: openfga.v1.OpenFGAService.ReadAuthorizationModels:output_type -> openfga.v1.ReadAuthorizationModelsResponse - 25, // 87: openfga.v1.OpenFGAService.ReadAuthorizationModel:output_type -> openfga.v1.ReadAuthorizationModelResponse - 27, // 88: openfga.v1.OpenFGAService.WriteAuthorizationModel:output_type -> openfga.v1.WriteAuthorizationModelResponse - 31, // 89: openfga.v1.OpenFGAService.WriteAssertions:output_type -> openfga.v1.WriteAssertionsResponse - 33, // 90: openfga.v1.OpenFGAService.ReadAssertions:output_type -> openfga.v1.ReadAssertionsResponse - 35, // 91: openfga.v1.OpenFGAService.ReadChanges:output_type -> openfga.v1.ReadChangesResponse - 37, // 92: openfga.v1.OpenFGAService.CreateStore:output_type -> openfga.v1.CreateStoreResponse - 39, // 93: openfga.v1.OpenFGAService.UpdateStore:output_type -> openfga.v1.UpdateStoreResponse - 41, // 94: openfga.v1.OpenFGAService.DeleteStore:output_type -> openfga.v1.DeleteStoreResponse - 43, // 95: openfga.v1.OpenFGAService.GetStore:output_type -> openfga.v1.GetStoreResponse - 45, // 96: openfga.v1.OpenFGAService.ListStores:output_type -> openfga.v1.ListStoresResponse - 5, // 97: openfga.v1.OpenFGAService.StreamedListObjects:output_type -> openfga.v1.StreamedListObjectsResponse - 1, // 98: openfga.v1.OpenFGAService.ListObjects:output_type -> openfga.v1.ListObjectsResponse - 3, // 99: openfga.v1.OpenFGAService.ListUsers:output_type -> openfga.v1.ListUsersResponse - 81, // [81:100] is the sub-list for method output_type - 62, // [62:81] is the sub-list for method input_type - 62, // [62:62] is the sub-list for extension type_name - 62, // [62:62] is the sub-list for extension extendee - 0, // [0:62] is the sub-list for field type_name + 61, // 20: openfga.v1.WriteRequest.upsert_allowed:type_name -> openfga.v1.UpsertPreference + 14, // 21: openfga.v1.CheckRequest.tuple_key:type_name -> openfga.v1.CheckRequestTupleKey + 51, // 22: openfga.v1.CheckRequest.contextual_tuples:type_name -> openfga.v1.ContextualTupleKeys + 52, // 23: openfga.v1.CheckRequest.context:type_name -> google.protobuf.Struct + 53, // 24: openfga.v1.CheckRequest.consistency:type_name -> openfga.v1.ConsistencyPreference + 17, // 25: openfga.v1.BatchCheckRequest.checks:type_name -> openfga.v1.BatchCheckItem + 53, // 26: openfga.v1.BatchCheckRequest.consistency:type_name -> openfga.v1.ConsistencyPreference + 14, // 27: openfga.v1.BatchCheckItem.tuple_key:type_name -> openfga.v1.CheckRequestTupleKey + 51, // 28: openfga.v1.BatchCheckItem.contextual_tuples:type_name -> openfga.v1.ContextualTupleKeys + 52, // 29: openfga.v1.BatchCheckItem.context:type_name -> google.protobuf.Struct + 49, // 30: openfga.v1.BatchCheckResponse.result:type_name -> openfga.v1.BatchCheckResponse.ResultEntry + 20, // 31: openfga.v1.BatchCheckSingleResult.error:type_name -> openfga.v1.CheckError + 62, // 32: openfga.v1.CheckError.input_error:type_name -> openfga.v1.ErrorCode + 63, // 33: openfga.v1.CheckError.internal_error:type_name -> openfga.v1.InternalErrorCode + 22, // 34: openfga.v1.ExpandRequest.tuple_key:type_name -> openfga.v1.ExpandRequestTupleKey + 53, // 35: openfga.v1.ExpandRequest.consistency:type_name -> openfga.v1.ConsistencyPreference + 51, // 36: openfga.v1.ExpandRequest.contextual_tuples:type_name -> openfga.v1.ContextualTupleKeys + 64, // 37: openfga.v1.ExpandResponse.tree:type_name -> openfga.v1.UsersetTree + 65, // 38: openfga.v1.ReadAuthorizationModelResponse.authorization_model:type_name -> openfga.v1.AuthorizationModel + 66, // 39: openfga.v1.WriteAuthorizationModelRequest.type_definitions:type_name -> openfga.v1.TypeDefinition + 50, // 40: openfga.v1.WriteAuthorizationModelRequest.conditions:type_name -> openfga.v1.WriteAuthorizationModelRequest.ConditionsEntry + 58, // 41: openfga.v1.ReadAuthorizationModelsRequest.page_size:type_name -> google.protobuf.Int32Value + 65, // 42: openfga.v1.ReadAuthorizationModelsResponse.authorization_models:type_name -> openfga.v1.AuthorizationModel + 47, // 43: openfga.v1.WriteAssertionsRequest.assertions:type_name -> openfga.v1.Assertion + 47, // 44: openfga.v1.ReadAssertionsResponse.assertions:type_name -> openfga.v1.Assertion + 58, // 45: openfga.v1.ReadChangesRequest.page_size:type_name -> google.protobuf.Int32Value + 67, // 46: openfga.v1.ReadChangesRequest.start_time:type_name -> google.protobuf.Timestamp + 68, // 47: openfga.v1.ReadChangesResponse.changes:type_name -> openfga.v1.TupleChange + 67, // 48: openfga.v1.CreateStoreResponse.created_at:type_name -> google.protobuf.Timestamp + 67, // 49: openfga.v1.CreateStoreResponse.updated_at:type_name -> google.protobuf.Timestamp + 67, // 50: openfga.v1.UpdateStoreResponse.created_at:type_name -> google.protobuf.Timestamp + 67, // 51: openfga.v1.UpdateStoreResponse.updated_at:type_name -> google.protobuf.Timestamp + 67, // 52: openfga.v1.GetStoreResponse.created_at:type_name -> google.protobuf.Timestamp + 67, // 53: openfga.v1.GetStoreResponse.updated_at:type_name -> google.protobuf.Timestamp + 67, // 54: openfga.v1.GetStoreResponse.deleted_at:type_name -> google.protobuf.Timestamp + 58, // 55: openfga.v1.ListStoresRequest.page_size:type_name -> google.protobuf.Int32Value + 69, // 56: openfga.v1.ListStoresResponse.stores:type_name -> openfga.v1.Store + 46, // 57: openfga.v1.Assertion.tuple_key:type_name -> openfga.v1.AssertionTupleKey + 56, // 58: openfga.v1.Assertion.contextual_tuples:type_name -> openfga.v1.TupleKey + 52, // 59: openfga.v1.Assertion.context:type_name -> google.protobuf.Struct + 47, // 60: openfga.v1.Assertions.assertions:type_name -> openfga.v1.Assertion + 19, // 61: openfga.v1.BatchCheckResponse.ResultEntry.value:type_name -> openfga.v1.BatchCheckSingleResult + 70, // 62: openfga.v1.WriteAuthorizationModelRequest.ConditionsEntry.value:type_name -> openfga.v1.Condition + 6, // 63: openfga.v1.OpenFGAService.Read:input_type -> openfga.v1.ReadRequest + 11, // 64: openfga.v1.OpenFGAService.Write:input_type -> openfga.v1.WriteRequest + 13, // 65: openfga.v1.OpenFGAService.Check:input_type -> openfga.v1.CheckRequest + 16, // 66: openfga.v1.OpenFGAService.BatchCheck:input_type -> openfga.v1.BatchCheckRequest + 21, // 67: openfga.v1.OpenFGAService.Expand:input_type -> openfga.v1.ExpandRequest + 28, // 68: openfga.v1.OpenFGAService.ReadAuthorizationModels:input_type -> openfga.v1.ReadAuthorizationModelsRequest + 24, // 69: openfga.v1.OpenFGAService.ReadAuthorizationModel:input_type -> openfga.v1.ReadAuthorizationModelRequest + 26, // 70: openfga.v1.OpenFGAService.WriteAuthorizationModel:input_type -> openfga.v1.WriteAuthorizationModelRequest + 30, // 71: openfga.v1.OpenFGAService.WriteAssertions:input_type -> openfga.v1.WriteAssertionsRequest + 32, // 72: openfga.v1.OpenFGAService.ReadAssertions:input_type -> openfga.v1.ReadAssertionsRequest + 34, // 73: openfga.v1.OpenFGAService.ReadChanges:input_type -> openfga.v1.ReadChangesRequest + 36, // 74: openfga.v1.OpenFGAService.CreateStore:input_type -> openfga.v1.CreateStoreRequest + 38, // 75: openfga.v1.OpenFGAService.UpdateStore:input_type -> openfga.v1.UpdateStoreRequest + 40, // 76: openfga.v1.OpenFGAService.DeleteStore:input_type -> openfga.v1.DeleteStoreRequest + 42, // 77: openfga.v1.OpenFGAService.GetStore:input_type -> openfga.v1.GetStoreRequest + 44, // 78: openfga.v1.OpenFGAService.ListStores:input_type -> openfga.v1.ListStoresRequest + 4, // 79: openfga.v1.OpenFGAService.StreamedListObjects:input_type -> openfga.v1.StreamedListObjectsRequest + 0, // 80: openfga.v1.OpenFGAService.ListObjects:input_type -> openfga.v1.ListObjectsRequest + 2, // 81: openfga.v1.OpenFGAService.ListUsers:input_type -> openfga.v1.ListUsersRequest + 8, // 82: openfga.v1.OpenFGAService.Read:output_type -> openfga.v1.ReadResponse + 12, // 83: openfga.v1.OpenFGAService.Write:output_type -> openfga.v1.WriteResponse + 15, // 84: openfga.v1.OpenFGAService.Check:output_type -> openfga.v1.CheckResponse + 18, // 85: openfga.v1.OpenFGAService.BatchCheck:output_type -> openfga.v1.BatchCheckResponse + 23, // 86: openfga.v1.OpenFGAService.Expand:output_type -> openfga.v1.ExpandResponse + 29, // 87: openfga.v1.OpenFGAService.ReadAuthorizationModels:output_type -> openfga.v1.ReadAuthorizationModelsResponse + 25, // 88: openfga.v1.OpenFGAService.ReadAuthorizationModel:output_type -> openfga.v1.ReadAuthorizationModelResponse + 27, // 89: openfga.v1.OpenFGAService.WriteAuthorizationModel:output_type -> openfga.v1.WriteAuthorizationModelResponse + 31, // 90: openfga.v1.OpenFGAService.WriteAssertions:output_type -> openfga.v1.WriteAssertionsResponse + 33, // 91: openfga.v1.OpenFGAService.ReadAssertions:output_type -> openfga.v1.ReadAssertionsResponse + 35, // 92: openfga.v1.OpenFGAService.ReadChanges:output_type -> openfga.v1.ReadChangesResponse + 37, // 93: openfga.v1.OpenFGAService.CreateStore:output_type -> openfga.v1.CreateStoreResponse + 39, // 94: openfga.v1.OpenFGAService.UpdateStore:output_type -> openfga.v1.UpdateStoreResponse + 41, // 95: openfga.v1.OpenFGAService.DeleteStore:output_type -> openfga.v1.DeleteStoreResponse + 43, // 96: openfga.v1.OpenFGAService.GetStore:output_type -> openfga.v1.GetStoreResponse + 45, // 97: openfga.v1.OpenFGAService.ListStores:output_type -> openfga.v1.ListStoresResponse + 5, // 98: openfga.v1.OpenFGAService.StreamedListObjects:output_type -> openfga.v1.StreamedListObjectsResponse + 1, // 99: openfga.v1.OpenFGAService.ListObjects:output_type -> openfga.v1.ListObjectsResponse + 3, // 100: openfga.v1.OpenFGAService.ListUsers:output_type -> openfga.v1.ListUsersResponse + 82, // [82:101] is the sub-list for method output_type + 63, // [63:82] is the sub-list for method input_type + 63, // [63:63] is the sub-list for extension type_name + 63, // [63:63] is the sub-list for extension extendee + 0, // [0:63] is the sub-list for field type_name } func init() { file_openfga_v1_openfga_service_proto_init() } @@ -5890,6 +5908,7 @@ func file_openfga_v1_openfga_service_proto_init() { file_openfga_v1_errors_ignore_proto_init() file_openfga_v1_openfga_proto_init() file_openfga_v1_openfga_service_consistency_proto_init() + file_openfga_v1_openfga_upsert_proto_init() if !protoimpl.UnsafeEnabled { file_openfga_v1_openfga_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListObjectsRequest); i { diff --git a/proto/openfga/v1/openfga_service.pb.validate.go b/proto/openfga/v1/openfga_service.pb.validate.go index cc975a3..5fd6b8b 100644 --- a/proto/openfga/v1/openfga_service.pb.validate.go +++ b/proto/openfga/v1/openfga_service.pb.validate.go @@ -2036,6 +2036,17 @@ func (m *WriteRequest) validate(all bool) error { } + if _, ok := UpsertPreference_name[int32(m.GetUpsertAllowed())]; !ok { + err := WriteRequestValidationError{ + field: "UpsertAllowed", + reason: "value must be one of the defined enum values", + } + if !all { + return err + } + errors = append(errors, err) + } + if len(errors) > 0 { return WriteRequestMultiError(errors) } diff --git a/proto/openfga/v1/openfga_upsert.pb.go b/proto/openfga/v1/openfga_upsert.pb.go new file mode 100644 index 0000000..398f626 --- /dev/null +++ b/proto/openfga/v1/openfga_upsert.pb.go @@ -0,0 +1,147 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.0 +// protoc (unknown) +// source: openfga/v1/openfga_upsert.proto + +package openfgav1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Controls whether duplicate is allowed. +type UpsertPreference int32 + +const ( + // Default if not set. Behavior will be the same as INSERT_ONLY. + UpsertPreference_UPSERT_UNSPECIFIED UpsertPreference = 0 + // Write failed when there are duplicate entry. + UpsertPreference_INSERT_ONLY UpsertPreference = 100 + // Upsert when there are existing entry. + UpsertPreference_ALLOW_UPSERT UpsertPreference = 200 +) + +// Enum value maps for UpsertPreference. +var ( + UpsertPreference_name = map[int32]string{ + 0: "UPSERT_UNSPECIFIED", + 100: "INSERT_ONLY", + 200: "ALLOW_UPSERT", + } + UpsertPreference_value = map[string]int32{ + "UPSERT_UNSPECIFIED": 0, + "INSERT_ONLY": 100, + "ALLOW_UPSERT": 200, + } +) + +func (x UpsertPreference) Enum() *UpsertPreference { + p := new(UpsertPreference) + *p = x + return p +} + +func (x UpsertPreference) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (UpsertPreference) Descriptor() protoreflect.EnumDescriptor { + return file_openfga_v1_openfga_upsert_proto_enumTypes[0].Descriptor() +} + +func (UpsertPreference) Type() protoreflect.EnumType { + return &file_openfga_v1_openfga_upsert_proto_enumTypes[0] +} + +func (x UpsertPreference) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use UpsertPreference.Descriptor instead. +func (UpsertPreference) EnumDescriptor() ([]byte, []int) { + return file_openfga_v1_openfga_upsert_proto_rawDescGZIP(), []int{0} +} + +var File_openfga_v1_openfga_upsert_proto protoreflect.FileDescriptor + +var file_openfga_v1_openfga_upsert_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x66, 0x67, 0x61, 0x5f, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2a, 0x4e, 0x0a, + 0x10, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x50, 0x53, 0x45, 0x52, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x53, + 0x45, 0x52, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x64, 0x12, 0x11, 0x0a, 0x0c, 0x41, 0x4c, + 0x4c, 0x4f, 0x57, 0x5f, 0x55, 0x50, 0x53, 0x45, 0x52, 0x54, 0x10, 0xc8, 0x01, 0x42, 0xa0, 0x01, + 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, + 0x42, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x3b, + 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x58, 0x58, 0xaa, + 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0a, 0x4f, + 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x16, 0x4f, 0x70, 0x65, 0x6e, + 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_openfga_v1_openfga_upsert_proto_rawDescOnce sync.Once + file_openfga_v1_openfga_upsert_proto_rawDescData = file_openfga_v1_openfga_upsert_proto_rawDesc +) + +func file_openfga_v1_openfga_upsert_proto_rawDescGZIP() []byte { + file_openfga_v1_openfga_upsert_proto_rawDescOnce.Do(func() { + file_openfga_v1_openfga_upsert_proto_rawDescData = protoimpl.X.CompressGZIP(file_openfga_v1_openfga_upsert_proto_rawDescData) + }) + return file_openfga_v1_openfga_upsert_proto_rawDescData +} + +var file_openfga_v1_openfga_upsert_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_openfga_v1_openfga_upsert_proto_goTypes = []interface{}{ + (UpsertPreference)(0), // 0: openfga.v1.UpsertPreference +} +var file_openfga_v1_openfga_upsert_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_openfga_v1_openfga_upsert_proto_init() } +func file_openfga_v1_openfga_upsert_proto_init() { + if File_openfga_v1_openfga_upsert_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_openfga_v1_openfga_upsert_proto_rawDesc, + NumEnums: 1, + NumMessages: 0, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_openfga_v1_openfga_upsert_proto_goTypes, + DependencyIndexes: file_openfga_v1_openfga_upsert_proto_depIdxs, + EnumInfos: file_openfga_v1_openfga_upsert_proto_enumTypes, + }.Build() + File_openfga_v1_openfga_upsert_proto = out.File + file_openfga_v1_openfga_upsert_proto_rawDesc = nil + file_openfga_v1_openfga_upsert_proto_goTypes = nil + file_openfga_v1_openfga_upsert_proto_depIdxs = nil +} diff --git a/proto/openfga/v1/openfga_upsert.pb.validate.go b/proto/openfga/v1/openfga_upsert.pb.validate.go new file mode 100644 index 0000000..dd16b03 --- /dev/null +++ b/proto/openfga/v1/openfga_upsert.pb.validate.go @@ -0,0 +1,36 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: openfga/v1/openfga_upsert.proto + +package openfgav1 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "sort" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/protobuf/types/known/anypb" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = anypb.Any{} + _ = sort.Sort +)