diff --git a/perxis-proto b/perxis-proto
index d9fd1b7382944ef12019bcab1ad00334d9b90a88..e0c174cd26694f42fbb65eb4d2c86fdcd1fcbbf0 160000
--- a/perxis-proto
+++ b/perxis-proto
@@ -1 +1 @@
-Subproject commit d9fd1b7382944ef12019bcab1ad00334d9b90a88
+Subproject commit e0c174cd26694f42fbb65eb4d2c86fdcd1fcbbf0
diff --git a/pkg/items/middleware/caching_middleware.go b/pkg/items/middleware/caching_middleware.go
index 65351dae6da57811608d27eaf46dde6a5f9da04a..2d76f2150eeacc1cd70e9697c3db63853ef47908 100644
--- a/pkg/items/middleware/caching_middleware.go
+++ b/pkg/items/middleware/caching_middleware.go
@@ -69,19 +69,19 @@ func (m cachingMiddleware) Update(ctx context.Context, item *service.Item, optio
 	return err
 }
 
-func (m cachingMiddleware) Delete(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*service.DeleteOptions) (err error) {
+func (m cachingMiddleware) Delete(ctx context.Context, del *service.Item, options ...*service.DeleteOptions) (err error) {
 
-	err = m.Items.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
+	err = m.Items.Delete(ctx, del, options...)
 	if err == nil {
-		env, err := m.envs.Get(ctx, spaceId, envId)
+		env, err := m.envs.Get(ctx, del.SpaceID, del.EnvID)
 		if err != nil {
 			return err
 		}
-		m.cache.Remove(makeKey(spaceId, env.ID, collectionId, itemId))
-		m.cachePublished.Remove(makeKey(spaceId, env.ID, collectionId, itemId))
+		m.cache.Remove(makeKey(del.SpaceID, env.ID, del.CollectionID, del.ID))
+		m.cachePublished.Remove(makeKey(del.SpaceID, env.ID, del.CollectionID, del.ID))
 		for _, al := range env.Aliases {
-			m.cache.Remove(makeKey(spaceId, al, collectionId, itemId))
-			m.cachePublished.Remove(makeKey(spaceId, al, collectionId, itemId))
+			m.cache.Remove(makeKey(del.SpaceID, al, del.CollectionID, del.ID))
+			m.cachePublished.Remove(makeKey(del.SpaceID, al, del.CollectionID, del.ID))
 		}
 
 	}
diff --git a/pkg/items/middleware/caching_middleware_test.go b/pkg/items/middleware/caching_middleware_test.go
index a5ff1a95bc448b0df4c1b6498ce9ae0f25a55d19..b7ea569db094e7905b6aae2ce8bebfb381849f95 100644
--- a/pkg/items/middleware/caching_middleware_test.go
+++ b/pkg/items/middleware/caching_middleware_test.go
@@ -289,10 +289,10 @@ func TestItemsCache(t *testing.T) {
 			require.NoError(t, err)
 			assert.Same(t, v2, v3, "Ожидается получение объекта из кеша по alias окружения.")
 
-			itms.On("Delete", mock.Anything, spaceID, envID, colID, itemID).Return(nil).Once()
+			itms.On("Delete", mock.Anything, mock.Anything).Return(nil).Once()
 			env.On("Get", mock.Anything, spaceID, envID).Return(&environments.Environment{ID: envID, SpaceID: spaceID, Aliases: []string{envAlias}}, nil).Once()
 
-			err = svc.Delete(ctx, spaceID, envID, colID, itemID)
+			err = svc.Delete(ctx, &items.Item{ID: itemID, SpaceID: spaceID, EnvID: envID, CollectionID: colID})
 			require.NoError(t, err)
 
 			itms.On("Get", mock.Anything, spaceID, envID, colID, itemID).Return(nil, errNotFound).Once()
@@ -543,10 +543,10 @@ func TestItemsCache(t *testing.T) {
 			require.NoError(t, err)
 			assert.Same(t, v2, v3, "Ожидается получение объекта из кеша по о alias окружения.")
 
-			itms.On("Delete", mock.Anything, spaceID, envID, colID, itemID).Return(nil).Once()
+			itms.On("Delete", mock.Anything, mock.Anything).Return(nil).Once()
 			env.On("Get", mock.Anything, spaceID, envID).Return(&environments.Environment{ID: envID, SpaceID: spaceID, Aliases: []string{envAlias}}, nil).Once()
 
-			err = svc.Delete(ctx, spaceID, envID, colID, itemID)
+			err = svc.Delete(ctx, &items.Item{ID: itemID, SpaceID: spaceID, EnvID: envID, CollectionID: colID})
 			require.NoError(t, err)
 
 			itms.On("GetPublished", mock.Anything, spaceID, envID, colID, itemID, mock.Anything).Return(nil, errNotFound).Once()
diff --git a/pkg/items/middleware/client_encode_middleware.go b/pkg/items/middleware/client_encode_middleware.go
index 59d351864f52b76a64c3141c5b5c796d1614bf0e..873a0e97c7690bcf51a042528787c57860d6163f 100644
--- a/pkg/items/middleware/client_encode_middleware.go
+++ b/pkg/items/middleware/client_encode_middleware.go
@@ -276,12 +276,12 @@ func (m *encodeDecodeMiddleware) Unarchive(ctx context.Context, item *items.Item
 	return m.next.Unarchive(ctx, item, opts...)
 }
 
-func (m *encodeDecodeMiddleware) Delete(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*items.DeleteOptions) (err error) {
-	return m.next.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
+func (m *encodeDecodeMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) {
+	return m.next.Delete(ctx, item, options...)
 }
 
-func (m *encodeDecodeMiddleware) Undelete(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*items.UndeleteOptions) (err error) {
-	return m.next.Undelete(ctx, spaceId, envId, collectionId, itemId, options...)
+func (m *encodeDecodeMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) {
+	return m.next.Undelete(ctx, item, options...)
 }
 
 func (m *encodeDecodeMiddleware) Aggregate(ctx context.Context, spaceId, envId, collectionId string, filter *items.Filter, options ...*items.AggregateOptions) (result map[string]interface{}, err error) {
diff --git a/pkg/items/middleware/error_logging_middleware.go b/pkg/items/middleware/error_logging_middleware.go
index 7c029b3822725b31ee019a7de1f48a23a3da3b93..345d22ca2727d1516e4a7176e885195ab38f1d20 100644
--- a/pkg/items/middleware/error_logging_middleware.go
+++ b/pkg/items/middleware/error_logging_middleware.go
@@ -1,9 +1,9 @@
-package middleware
-
 // Code generated by gowrap. DO NOT EDIT.
 // template: ../../../assets/templates/middleware/error_log
 // gowrap: http://github.com/hexdigest/gowrap
 
+package middleware
+
 //go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/items -i Items -t ../../../assets/templates/middleware/error_log -o error_logging_middleware.go -l ""
 
 import (
@@ -70,14 +70,14 @@ func (m *errorLoggingMiddleware) Create(ctx context.Context, item *items.Item, o
 	return m.next.Create(ctx, item, opts...)
 }
 
-func (m *errorLoggingMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.DeleteOptions) (err error) {
+func (m *errorLoggingMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) {
 	logger := m.logger
 	defer func() {
 		if err != nil {
 			logger.Warn("response error", zap.Error(err))
 		}
 	}()
-	return m.next.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
+	return m.next.Delete(ctx, item, options...)
 }
 
 func (m *errorLoggingMiddleware) Find(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindOptions) (items []*items.Item, total int, err error) {
@@ -180,14 +180,14 @@ func (m *errorLoggingMiddleware) Unarchive(ctx context.Context, item *items.Item
 	return m.next.Unarchive(ctx, item, options...)
 }
 
-func (m *errorLoggingMiddleware) Undelete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.UndeleteOptions) (err error) {
+func (m *errorLoggingMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) {
 	logger := m.logger
 	defer func() {
 		if err != nil {
 			logger.Warn("response error", zap.Error(err))
 		}
 	}()
-	return m.next.Undelete(ctx, spaceId, envId, collectionId, itemId, options...)
+	return m.next.Undelete(ctx, item, options...)
 }
 
 func (m *errorLoggingMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) {
diff --git a/pkg/items/middleware/logging_middleware.go b/pkg/items/middleware/logging_middleware.go
index 26dffe7787261cb98e1a87a3543c96709428d723..6ed28f90053eab68a44b1e5ac79d5228d7bfe9be 100644
--- a/pkg/items/middleware/logging_middleware.go
+++ b/pkg/items/middleware/logging_middleware.go
@@ -1,9 +1,9 @@
-package middleware
-
 // Code generated by gowrap. DO NOT EDIT.
 // template: ../../../assets/templates/middleware/access_log
 // gowrap: http://github.com/hexdigest/gowrap
 
+package middleware
+
 //go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/items -i Items -t ../../../assets/templates/middleware/access_log -o logging_middleware.go -l ""
 
 import (
@@ -191,16 +191,13 @@ func (m *loggingMiddleware) Create(ctx context.Context, item *items.Item, opts .
 	return created, err
 }
 
-func (m *loggingMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.DeleteOptions) (err error) {
+func (m *loggingMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) {
 	begin := time.Now()
 	var fields []zapcore.Field
 	for k, v := range map[string]interface{}{
-		"ctx":          ctx,
-		"spaceId":      spaceId,
-		"envId":        envId,
-		"collectionId": collectionId,
-		"itemId":       itemId,
-		"options":      options} {
+		"ctx":     ctx,
+		"item":    item,
+		"options": options} {
 		if k == "ctx" {
 			fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
 			continue
@@ -210,7 +207,7 @@ func (m *loggingMiddleware) Delete(ctx context.Context, spaceId string, envId st
 
 	m.logger.Debug("Delete.Request", fields...)
 
-	err = m.next.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
+	err = m.next.Delete(ctx, item, options...)
 
 	fields = []zapcore.Field{
 		zap.Duration("time", time.Since(begin)),
@@ -635,16 +632,13 @@ func (m *loggingMiddleware) Unarchive(ctx context.Context, item *items.Item, opt
 	return err
 }
 
-func (m *loggingMiddleware) Undelete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.UndeleteOptions) (err error) {
+func (m *loggingMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) {
 	begin := time.Now()
 	var fields []zapcore.Field
 	for k, v := range map[string]interface{}{
-		"ctx":          ctx,
-		"spaceId":      spaceId,
-		"envId":        envId,
-		"collectionId": collectionId,
-		"itemId":       itemId,
-		"options":      options} {
+		"ctx":     ctx,
+		"item":    item,
+		"options": options} {
 		if k == "ctx" {
 			fields = append(fields, zap.String("principal", fmt.Sprint(auth.GetPrincipal(ctx))))
 			continue
@@ -654,7 +648,7 @@ func (m *loggingMiddleware) Undelete(ctx context.Context, spaceId string, envId
 
 	m.logger.Debug("Undelete.Request", fields...)
 
-	err = m.next.Undelete(ctx, spaceId, envId, collectionId, itemId, options...)
+	err = m.next.Undelete(ctx, item, options...)
 
 	fields = []zapcore.Field{
 		zap.Duration("time", time.Since(begin)),
diff --git a/pkg/items/middleware/recovering_middleware.go b/pkg/items/middleware/recovering_middleware.go
index 21f823bc4352747a0a839a02afa3e84be155df10..d719dd114010f4a28658a0508030042fe80c7d5e 100644
--- a/pkg/items/middleware/recovering_middleware.go
+++ b/pkg/items/middleware/recovering_middleware.go
@@ -79,7 +79,7 @@ func (m *recoveringMiddleware) Create(ctx context.Context, item *items.Item, opt
 	return m.next.Create(ctx, item, opts...)
 }
 
-func (m *recoveringMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.DeleteOptions) (err error) {
+func (m *recoveringMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) {
 	logger := m.logger
 	defer func() {
 		if r := recover(); r != nil {
@@ -88,7 +88,7 @@ func (m *recoveringMiddleware) Delete(ctx context.Context, spaceId string, envId
 		}
 	}()
 
-	return m.next.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
+	return m.next.Delete(ctx, item, options...)
 }
 
 func (m *recoveringMiddleware) Find(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindOptions) (items []*items.Item, total int, err error) {
@@ -211,7 +211,7 @@ func (m *recoveringMiddleware) Unarchive(ctx context.Context, item *items.Item,
 	return m.next.Unarchive(ctx, item, options...)
 }
 
-func (m *recoveringMiddleware) Undelete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.UndeleteOptions) (err error) {
+func (m *recoveringMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) {
 	logger := m.logger
 	defer func() {
 		if r := recover(); r != nil {
@@ -220,7 +220,7 @@ func (m *recoveringMiddleware) Undelete(ctx context.Context, spaceId string, env
 		}
 	}()
 
-	return m.next.Undelete(ctx, spaceId, envId, collectionId, itemId, options...)
+	return m.next.Undelete(ctx, item, options...)
 }
 
 func (m *recoveringMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) {
diff --git a/pkg/items/middleware/telemetry_middleware.go b/pkg/items/middleware/telemetry_middleware.go
index 1e07b57ac5e0320c0962acd9d96b514901d88ea5..efbbc479d3b4ac1484d169376497aa20a1f034cc 100644
--- a/pkg/items/middleware/telemetry_middleware.go
+++ b/pkg/items/middleware/telemetry_middleware.go
@@ -131,17 +131,14 @@ func (_d telemetryMiddleware) Create(ctx context.Context, item *items.Item, opts
 }
 
 // Delete implements items.Items
-func (_d telemetryMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.DeleteOptions) (err error) {
+func (_d telemetryMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) {
 	ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Delete")
 	defer func() {
 		if _d._spanDecorator != nil {
 			_d._spanDecorator(_span, map[string]interface{}{
-				"ctx":          ctx,
-				"spaceId":      spaceId,
-				"envId":        envId,
-				"collectionId": collectionId,
-				"itemId":       itemId,
-				"options":      options}, map[string]interface{}{
+				"ctx":     ctx,
+				"item":    item,
+				"options": options}, map[string]interface{}{
 				"err": err})
 		} else if err != nil {
 			_span.RecordError(err)
@@ -151,7 +148,7 @@ func (_d telemetryMiddleware) Delete(ctx context.Context, spaceId string, envId
 
 		_span.End()
 	}()
-	return _d.Items.Delete(ctx, spaceId, envId, collectionId, itemId, options...)
+	return _d.Items.Delete(ctx, item, options...)
 }
 
 // Find implements items.Items
@@ -399,17 +396,14 @@ func (_d telemetryMiddleware) Unarchive(ctx context.Context, item *items.Item, o
 }
 
 // Undelete implements items.Items
-func (_d telemetryMiddleware) Undelete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.UndeleteOptions) (err error) {
+func (_d telemetryMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) {
 	ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Items.Undelete")
 	defer func() {
 		if _d._spanDecorator != nil {
 			_d._spanDecorator(_span, map[string]interface{}{
-				"ctx":          ctx,
-				"spaceId":      spaceId,
-				"envId":        envId,
-				"collectionId": collectionId,
-				"itemId":       itemId,
-				"options":      options}, map[string]interface{}{
+				"ctx":     ctx,
+				"item":    item,
+				"options": options}, map[string]interface{}{
 				"err": err})
 		} else if err != nil {
 			_span.RecordError(err)
@@ -419,7 +413,7 @@ func (_d telemetryMiddleware) Undelete(ctx context.Context, spaceId string, envI
 
 		_span.End()
 	}()
-	return _d.Items.Undelete(ctx, spaceId, envId, collectionId, itemId, options...)
+	return _d.Items.Undelete(ctx, item, options...)
 }
 
 // Unpublish implements items.Items
diff --git a/pkg/items/mocks/Items.go b/pkg/items/mocks/Items.go
index 1070cc78c9861e1d5613191b5b36c0fd7cffabd5..6ecfdeaacd17c7c9d0accf53c6f1817405e7da60 100644
--- a/pkg/items/mocks/Items.go
+++ b/pkg/items/mocks/Items.go
@@ -127,20 +127,20 @@ func (_m *Items) Create(ctx context.Context, item *items.Item, opts ...*items.Cr
 	return r0, r1
 }
 
-// Delete provides a mock function with given fields: ctx, spaceId, envId, collectionId, itemId, options
-func (_m *Items) Delete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.DeleteOptions) error {
+// Delete provides a mock function with given fields: ctx, item, options
+func (_m *Items) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) error {
 	_va := make([]interface{}, len(options))
 	for _i := range options {
 		_va[_i] = options[_i]
 	}
 	var _ca []interface{}
-	_ca = append(_ca, ctx, spaceId, envId, collectionId, itemId)
+	_ca = append(_ca, ctx, item)
 	_ca = append(_ca, _va...)
 	ret := _m.Called(_ca...)
 
 	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, string, string, string, string, ...*items.DeleteOptions) error); ok {
-		r0 = rf(ctx, spaceId, envId, collectionId, itemId, options...)
+	if rf, ok := ret.Get(0).(func(context.Context, *items.Item, ...*items.DeleteOptions) error); ok {
+		r0 = rf(ctx, item, options...)
 	} else {
 		r0 = ret.Error(0)
 	}
@@ -460,20 +460,20 @@ func (_m *Items) Unarchive(ctx context.Context, item *items.Item, options ...*it
 	return r0
 }
 
-// Undelete provides a mock function with given fields: ctx, spaceId, envId, collectionId, itemId, options
-func (_m *Items) Undelete(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.UndeleteOptions) error {
+// Undelete provides a mock function with given fields: ctx, item, options
+func (_m *Items) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) error {
 	_va := make([]interface{}, len(options))
 	for _i := range options {
 		_va[_i] = options[_i]
 	}
 	var _ca []interface{}
-	_ca = append(_ca, ctx, spaceId, envId, collectionId, itemId)
+	_ca = append(_ca, ctx, item)
 	_ca = append(_ca, _va...)
 	ret := _m.Called(_ca...)
 
 	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, string, string, string, string, ...*items.UndeleteOptions) error); ok {
-		r0 = rf(ctx, spaceId, envId, collectionId, itemId, options...)
+	if rf, ok := ret.Get(0).(func(context.Context, *items.Item, ...*items.UndeleteOptions) error); ok {
+		r0 = rf(ctx, item, options...)
 	} else {
 		r0 = ret.Error(0)
 	}
diff --git a/pkg/items/options.go b/pkg/items/options.go
index d48a1cdaacb157e46c1185a37602c1703bb3b59e..3d45a226ac44f858cf12c6df3e1eafdb1a3b38fa 100644
--- a/pkg/items/options.go
+++ b/pkg/items/options.go
@@ -134,15 +134,19 @@ func MergeUpdateOptions(opts ...*UpdateOptions) *UpdateOptions {
 type DeleteOptions struct {
 	Options
 
-	Erase bool
+	UpdateAttrs bool
+	Erase       bool
 }
 
-func MergeDeleteOptions(opts ...*DeleteOptions) *DeleteOptions {
+func MergeDeleteOptions(options ...*DeleteOptions) *DeleteOptions {
 	o := &DeleteOptions{}
-	for _, opt := range opts {
+	for _, opt := range options {
 		if opt == nil {
 			continue
 		}
+		if opt.UpdateAttrs {
+			o.UpdateAttrs = true
+		}
 		if opt.Erase {
 			o.Erase = true
 		}
@@ -169,6 +173,8 @@ func MergeSoftDeleteOptions(opts ...*SoftDeleteOptions) *SoftDeleteOptions {
 
 type UndeleteOptions struct {
 	Options
+
+	UpdateAttrs bool
 }
 
 func MergeUndeleteOptions(opts ...*UndeleteOptions) *UndeleteOptions {
@@ -177,6 +183,10 @@ func MergeUndeleteOptions(opts ...*UndeleteOptions) *UndeleteOptions {
 		if opt == nil {
 			continue
 		}
+		if opt.UpdateAttrs {
+			o.UpdateAttrs = true
+		}
+
 		o.Options = MergeOptions(o.Options, opt.Options)
 	}
 	return o
@@ -204,6 +214,8 @@ func MergePublishOptions(opts ...*PublishOptions) *PublishOptions {
 }
 
 type UnpublishOptions struct {
+	UpdateAttrs bool
+	
 	Options
 }
 
@@ -213,6 +225,10 @@ func MergeUnpublishOptions(opts ...*UnpublishOptions) *UnpublishOptions {
 		if opt == nil {
 			continue
 		}
+		if opt.UpdateAttrs {
+			o.UpdateAttrs = true
+		}
+
 		o.Options = MergeOptions(o.Options, opt.Options)
 	}
 	return o
diff --git a/pkg/items/service.go b/pkg/items/service.go
index c10a69c55878a1fbfe571dc0fad594c338dccb99..51d65d5bc9f7b3cc039f3e40da5e1abf53c4e51f 100644
--- a/pkg/items/service.go
+++ b/pkg/items/service.go
@@ -23,10 +23,10 @@ type Items interface {
 	// Delete выполняет удаление элемента
 	// Если установлен флаг DeleteOptions.Erase то данные будут полностью удалены из системы.
 	// В противном случае выполняется "мягкое удаление", элемент помечается как удаленный и может быть восстановлен с помощью метода Items.Undelete и получен в Items.Get/Find
-	Delete(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*DeleteOptions) (err error)
+	Delete(ctx context.Context, item *Item, options ...*DeleteOptions) (err error)
 
 	// Undelete восстанавливает элементы после "мягкого удаление"
-	Undelete(ctx context.Context, spaceId, envId, collectionId, itemId string, options ...*UndeleteOptions) (err error)
+	Undelete(ctx context.Context, item *Item, options ...*UndeleteOptions) (err error)
 
 	Publish(ctx context.Context, item *Item, options ...*PublishOptions) (err error)
 	Unpublish(ctx context.Context, item *Item, options ...*UnpublishOptions) (err error)
diff --git a/pkg/items/transport/client.go b/pkg/items/transport/client.go
index 3f6bd04ceab90dad415d963c6db3d1a9f4fb4b47..db1a7a789df8bf7b820d018a219bcd4d3a635153 100644
--- a/pkg/items/transport/client.go
+++ b/pkg/items/transport/client.go
@@ -89,14 +89,8 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *items.Item, arg2 ...*
 	return res0
 }
 
-func (set EndpointsSet) Delete(arg0 context.Context, arg1, arg2, arg3, arg4 string, options ...*items.DeleteOptions) (res0 error) {
-	request := DeleteRequest{
-		CollectionId: arg3,
-		EnvId:        arg2,
-		ItemId:       arg4,
-		SpaceId:      arg1,
-		Options:      options,
-	}
+func (set EndpointsSet) Delete(arg0 context.Context, arg1 *items.Item, arg2 ...*items.DeleteOptions) (res0 error) {
+	request := DeleteRequest{Item: arg1,Options: arg2}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
 		return
@@ -104,14 +98,8 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1, arg2, arg3, arg4 stri
 	return res0
 }
 
-func (set EndpointsSet) Undelete(arg0 context.Context, arg1, arg2, arg3, arg4 string, options ...*items.UndeleteOptions) (res0 error) {
-	request := UndeleteRequest{
-		CollectionId: arg3,
-		EnvId:        arg2,
-		ItemId:       arg4,
-		SpaceId:      arg1,
-		Options:      options,
-	}
+func (set EndpointsSet) Undelete(arg0 context.Context,arg1 *items.Item, options ...*items.UndeleteOptions) (res0 error) {
+	request := UndeleteRequest{Item: arg1, Options: options}
 	_, res0 = set.UndeleteEndpoint(arg0, &request)
 	if res0 != nil {
 		return
diff --git a/pkg/items/transport/exchanges.microgen.go b/pkg/items/transport/exchanges.microgen.go
index b601946f74837d41df38b07e3c5887ba8698b183..be18dc59805565756e6736f60895e81bc186e1d6 100644
--- a/pkg/items/transport/exchanges.microgen.go
+++ b/pkg/items/transport/exchanges.microgen.go
@@ -57,21 +57,15 @@ type (
 	UpdateResponse struct{}
 
 	DeleteRequest struct {
-		SpaceId      string                 `json:"space_id"`
-		EnvId        string                 `json:"env_id"`
-		CollectionId string                 `json:"collection_id"`
-		ItemId       string                 `json:"item_id"`
-		Options      []*items.DeleteOptions `json:"options"` // This field was defined with ellipsis (...).
+		Item    *items.Item            `json:"item"`
+		Options []*items.DeleteOptions `json:"options"` // This field was defined with ellipsis (...).
 	}
 	// Formal exchange type, please do not delete.
 	DeleteResponse struct{}
 
 	UndeleteRequest struct {
-		SpaceId      string                   `json:"space_id"`
-		EnvId        string                   `json:"env_id"`
-		CollectionId string                   `json:"collection_id"`
-		ItemId       string                   `json:"item_id"`
-		Options      []*items.UndeleteOptions `json:"options"` // This field was defined with ellipsis (...).
+		Item    *items.Item              `json:"item"`
+		Options []*items.UndeleteOptions `json:"options"` // This field was defined with ellipsis (...).
 	}
 	// Formal exchange type, please do not delete.
 	UndeleteResponse struct{}
diff --git a/pkg/items/transport/grpc/client.microgen.go b/pkg/items/transport/grpc/client.microgen.go
index a91c8d16495333a356ebeb3e48100c40e0f7bc91..882f73893efb740c378698eafa0c782a7101276a 100644
--- a/pkg/items/transport/grpc/client.microgen.go
+++ b/pkg/items/transport/grpc/client.microgen.go
@@ -15,6 +15,20 @@ func NewGRPCClient(conn *grpc.ClientConn, addr string, opts ...grpckit.ClientOpt
 		addr = "content.items.Items"
 	}
 	return transport.EndpointsSet{
+		AggregateEndpoint: grpckit.NewClient(
+			conn, addr, "Aggregate",
+			_Encode_Aggregate_Request,
+			_Decode_Aggregate_Response,
+			pb.AggregateResponse{},
+			opts...,
+		).Endpoint(),
+		AggregatePublishedEndpoint: grpckit.NewClient(
+			conn, addr, "AggregatePublished",
+			_Encode_AggregatePublished_Request,
+			_Decode_AggregatePublished_Response,
+			pb.AggregatePublishedResponse{},
+			opts...,
+		).Endpoint(),
 		ArchiveEndpoint: grpckit.NewClient(
 			conn, addr, "Archive",
 			_Encode_Archive_Request,
@@ -36,13 +50,6 @@ func NewGRPCClient(conn *grpc.ClientConn, addr string, opts ...grpckit.ClientOpt
 			empty.Empty{},
 			opts...,
 		).Endpoint(),
-		UndeleteEndpoint: grpckit.NewClient(
-			conn, addr, "Undelete",
-			_Encode_Undelete_Request,
-			_Decode_Undelete_Response,
-			empty.Empty{},
-			opts...,
-		).Endpoint(),
 		FindArchivedEndpoint: grpckit.NewClient(
 			conn, addr, "FindArchived",
 			_Encode_FindArchived_Request,
@@ -113,6 +120,13 @@ func NewGRPCClient(conn *grpc.ClientConn, addr string, opts ...grpckit.ClientOpt
 			empty.Empty{},
 			opts...,
 		).Endpoint(),
+		UndeleteEndpoint: grpckit.NewClient(
+			conn, addr, "Undelete",
+			_Encode_Undelete_Request,
+			_Decode_Undelete_Response,
+			empty.Empty{},
+			opts...,
+		).Endpoint(),
 		UnpublishEndpoint: grpckit.NewClient(
 			conn, addr, "Unpublish",
 			_Encode_Unpublish_Request,
@@ -127,19 +141,5 @@ func NewGRPCClient(conn *grpc.ClientConn, addr string, opts ...grpckit.ClientOpt
 			empty.Empty{},
 			opts...,
 		).Endpoint(),
-		AggregateEndpoint: grpckit.NewClient(
-			conn, addr, "Aggregate",
-			_Encode_Aggregate_Request,
-			_Decode_Aggregate_Response,
-			pb.AggregateResponse{},
-			opts...,
-		).Endpoint(),
-		AggregatePublishedEndpoint: grpckit.NewClient(
-			conn, addr, "AggregatePublished",
-			_Encode_AggregatePublished_Request,
-			_Decode_AggregatePublished_Response,
-			pb.AggregatePublishedResponse{},
-			opts...,
-		).Endpoint(),
 	}
 }
diff --git a/pkg/items/transport/grpc/protobuf_endpoint_converters.microgen.go b/pkg/items/transport/grpc/protobuf_endpoint_converters.microgen.go
index 69a696df329a6e28e5912af8815df9852c0c504c..1d252fc1eddf3204d0b065dea21ecab10cb2a26f 100644
--- a/pkg/items/transport/grpc/protobuf_endpoint_converters.microgen.go
+++ b/pkg/items/transport/grpc/protobuf_endpoint_converters.microgen.go
@@ -92,17 +92,18 @@ func _Encode_Delete_Request(ctx context.Context, request interface{}) (interface
 		return nil, errors.New("nil DeleteRequest")
 	}
 	req := request.(*transport.DeleteRequest)
+	reqItem, err := PtrItemToProto(req.Item)
+	if err != nil {
+		return nil, err
+	}
 
 	opts, err := DeleteOptionsToProto(req.Options)
 	if err != nil {
 		return nil, err
 	}
 	return &pb.DeleteRequest{
-		CollectionId: req.CollectionId,
-		EnvId:        req.EnvId,
-		ItemId:       req.ItemId,
-		SpaceId:      req.SpaceId,
-		Options:      opts,
+		Item:    reqItem,
+		Options: opts,
 	}, nil
 }
 
@@ -111,11 +112,18 @@ func _Encode_Undelete_Request(ctx context.Context, request interface{}) (interfa
 		return nil, errors.New("nil UndeleteRequest")
 	}
 	req := request.(*transport.UndeleteRequest)
+	reqItem, err := PtrItemToProto(req.Item)
+	if err != nil {
+		return nil, err
+	}
+
+	opts, err := UndeleteOptionsToProto(req.Options)
+	if err != nil {
+		return nil, err
+	}
 	return &pb.UndeleteRequest{
-		CollectionId: req.CollectionId,
-		EnvId:        req.EnvId,
-		ItemId:       req.ItemId,
-		SpaceId:      req.SpaceId,
+		Item:    reqItem,
+		Options: opts,
 	}, nil
 }
 
@@ -148,7 +156,15 @@ func _Encode_Unpublish_Request(ctx context.Context, request interface{}) (interf
 	if err != nil {
 		return nil, err
 	}
-	return &pb.UnpublishRequest{Item: reqItem}, nil
+
+	opts, err := UnpublishOptionsToProto(req.Options)
+	if err != nil {
+		return nil, err
+	}
+	return &pb.UnpublishRequest{
+		Item:    reqItem,
+		Options: opts,
+	}, nil
 }
 
 func _Encode_GetPublished_Request(ctx context.Context, request interface{}) (interface{}, error) {
@@ -598,17 +614,18 @@ func _Decode_Delete_Request(ctx context.Context, request interface{}) (interface
 		return nil, errors.New("nil DeleteRequest")
 	}
 	req := request.(*pb.DeleteRequest)
+	reqItem, err := ProtoToPtrItem(req.Item)
+	if err != nil {
+		return nil, err
+	}
 
 	opts, err := ProtoToDeleteOptions(req.Options)
 	if err != nil {
 		return nil, err
 	}
 	return &transport.DeleteRequest{
-		CollectionId: string(req.CollectionId),
-		EnvId:        string(req.EnvId),
-		ItemId:       string(req.ItemId),
-		SpaceId:      string(req.SpaceId),
-		Options:      opts,
+		Item:    reqItem,
+		Options: opts,
 	}, nil
 }
 
@@ -617,11 +634,18 @@ func _Decode_Undelete_Request(ctx context.Context, request interface{}) (interfa
 		return nil, errors.New("nil UndeleteRequest")
 	}
 	req := request.(*pb.UndeleteRequest)
+	reqItem, err := ProtoToPtrItem(req.Item)
+	if err != nil {
+		return nil, err
+	}
+
+	opts, err := ProtoToUndeleteOptions(req.Options)
+	if err != nil {
+		return nil, err
+	}
 	return &transport.UndeleteRequest{
-		CollectionId: string(req.CollectionId),
-		EnvId:        string(req.EnvId),
-		ItemId:       string(req.ItemId),
-		SpaceId:      string(req.SpaceId),
+		Item:    reqItem,
+		Options: opts,
 	}, nil
 }
 
@@ -654,7 +678,15 @@ func _Decode_Unpublish_Request(ctx context.Context, request interface{}) (interf
 	if err != nil {
 		return nil, err
 	}
-	return &transport.UnpublishRequest{Item: reqItem}, nil
+
+	opts, err := ProtoToUnpublishOptions(req.Options)
+	if err != nil {
+		return nil, err
+	}
+	return &transport.UnpublishRequest{
+		Item:    reqItem,
+		Options: opts,
+	}, nil
 }
 
 func _Decode_GetPublished_Request(ctx context.Context, request interface{}) (interface{}, error) {
diff --git a/pkg/items/transport/grpc/protobuf_type_converters.microgen.go b/pkg/items/transport/grpc/protobuf_type_converters.microgen.go
index 7eae996594e266ddfc712183bd3e1d7c4a39c78a..63182822f884b61f9e5d9e21f7d73ba1eadf0f69 100644
--- a/pkg/items/transport/grpc/protobuf_type_converters.microgen.go
+++ b/pkg/items/transport/grpc/protobuf_type_converters.microgen.go
@@ -302,7 +302,10 @@ func ProtoToDeleteOptions(protoOptions *pb.DeleteOptions) ([]*service.DeleteOpti
 		return nil, nil
 	}
 	return []*service.DeleteOptions{
-		{Erase: protoOptions.Erase},
+		{
+			UpdateAttrs: protoOptions.UpdateAttrs,
+			Erase:       protoOptions.Erase,
+		},
 	}, nil
 }
 
@@ -314,10 +317,34 @@ func DeleteOptionsToProto(options []*service.DeleteOptions) (*pb.DeleteOptions,
 	opts := service.MergeDeleteOptions(options...)
 
 	return &pb.DeleteOptions{
+		UpdateAttrs: opts.UpdateAttrs,
 		Erase: opts.Erase,
 	}, nil
 }
 
+func ProtoToUndeleteOptions(protoOptions *pb.UndeleteOptions) ([]*service.UndeleteOptions, error) {
+	if protoOptions == nil {
+		return nil, nil
+	}
+	return []*service.UndeleteOptions{
+		{
+			UpdateAttrs: protoOptions.UpdateAttrs,
+		},
+	}, nil
+}
+
+func UndeleteOptionsToProto(options []*service.UndeleteOptions) (*pb.UndeleteOptions, error) {
+	if options == nil {
+		return nil, nil
+	}
+
+	opts := service.MergeUndeleteOptions(options...)
+
+	return &pb.UndeleteOptions{
+		UpdateAttrs: opts.UpdateAttrs,
+	}, nil
+}
+
 func ProtoToPublishOptions(protoOptions *pb.PublishOptions) ([]*service.PublishOptions, error) {
 	if protoOptions == nil {
 		return nil, nil
@@ -338,13 +365,25 @@ func PublishOptionsToProto(options []*service.PublishOptions) (*pb.PublishOption
 		UpdateAttrs: opts.UpdateAttrs,
 	}, nil
 }
-
-func ElPtrUnpublishOptionsToProto() {
-	panic("function not provided") // TODO: provide converter
+func ProtoToUnpublishOptions(protoOptions *pb.UnpublishOptions) ([]*service.UnpublishOptions, error) {
+	if protoOptions == nil {
+		return nil, nil
+	}
+	return []*service.UnpublishOptions{
+		{UpdateAttrs: protoOptions.UpdateAttrs},
+	}, nil
 }
 
-func ProtoToElPtrUnpublishOptions() {
-	panic("function not provided") // TODO: provide converter
+func UnpublishOptionsToProto(options []*service.UnpublishOptions) (*pb.UnpublishOptions, error) {
+	if options == nil {
+		return nil, nil
+	}
+
+	opts := service.MergeUnpublishOptions(options...)
+
+	return &pb.UnpublishOptions{
+		UpdateAttrs: opts.UpdateAttrs,
+	}, nil
 }
 
 func ElPtrGetPublishedOptionsToProto(options []*service.GetPublishedOptions) (*pb.GetPublishedOptions, error) {
diff --git a/pkg/items/transport/grpc/server.microgen.go b/pkg/items/transport/grpc/server.microgen.go
index a904b1e5a610dc12e38768d88b92eee392a6d7af..98ab6654cb836eb49052faff76e447a07c12d538 100644
--- a/pkg/items/transport/grpc/server.microgen.go
+++ b/pkg/items/transport/grpc/server.microgen.go
@@ -36,6 +36,18 @@ type itemsServer struct {
 
 func NewGRPCServer(endpoints *transport.EndpointsSet, opts ...grpc.ServerOption) pb.ItemsServer {
 	return &itemsServer{
+		aggregate: grpc.NewServer(
+			endpoints.AggregateEndpoint,
+			_Decode_Aggregate_Request,
+			_Encode_Aggregate_Response,
+			opts...,
+		),
+		aggregatePublished: grpc.NewServer(
+			endpoints.AggregatePublishedEndpoint,
+			_Decode_AggregatePublished_Request,
+			_Encode_AggregatePublished_Response,
+			opts...,
+		),
 		archive: grpc.NewServer(
 			endpoints.ArchiveEndpoint,
 			_Decode_Archive_Request,
@@ -54,12 +66,6 @@ func NewGRPCServer(endpoints *transport.EndpointsSet, opts ...grpc.ServerOption)
 			_Encode_Delete_Response,
 			opts...,
 		),
-		undelete: grpc.NewServer(
-			endpoints.UndeleteEndpoint,
-			_Decode_Undelete_Request,
-			_Encode_Undelete_Response,
-			opts...,
-		),
 		find: grpc.NewServer(
 			endpoints.FindEndpoint,
 			_Decode_Find_Request,
@@ -120,6 +126,12 @@ func NewGRPCServer(endpoints *transport.EndpointsSet, opts ...grpc.ServerOption)
 			_Encode_Unarchive_Response,
 			opts...,
 		),
+		undelete: grpc.NewServer(
+			endpoints.UndeleteEndpoint,
+			_Decode_Undelete_Request,
+			_Encode_Undelete_Response,
+			opts...,
+		),
 		unpublish: grpc.NewServer(
 			endpoints.UnpublishEndpoint,
 			_Decode_Unpublish_Request,
@@ -132,18 +144,6 @@ func NewGRPCServer(endpoints *transport.EndpointsSet, opts ...grpc.ServerOption)
 			_Encode_Update_Response,
 			opts...,
 		),
-		aggregate: grpc.NewServer(
-			endpoints.AggregateEndpoint,
-			_Decode_Aggregate_Request,
-			_Encode_Aggregate_Response,
-			opts...,
-		),
-		aggregatePublished: grpc.NewServer(
-			endpoints.AggregatePublishedEndpoint,
-			_Decode_AggregatePublished_Request,
-			_Encode_AggregatePublished_Response,
-			opts...,
-		),
 	}
 }
 
diff --git a/pkg/items/transport/server.microgen.go b/pkg/items/transport/server.microgen.go
index 4ba5f4a265125ea7b7168fab8d9c7c0f747f23bf..10d831bb534fcb695ca7305c3f9d696e31d9403d 100644
--- a/pkg/items/transport/server.microgen.go
+++ b/pkg/items/transport/server.microgen.go
@@ -14,10 +14,11 @@ import (
 
 func Endpoints(svc items.Items) EndpointsSet {
 	return EndpointsSet{
+		AggregateEndpoint:          AggregateEndpoint(svc),
+		AggregatePublishedEndpoint: AggregatePublishedEndpoint(svc),
 		ArchiveEndpoint:            ArchiveEndpoint(svc),
 		CreateEndpoint:             CreateEndpoint(svc),
 		DeleteEndpoint:             DeleteEndpoint(svc),
-		UndeleteEndpoint:           UndeleteEndpoint(svc),
 		FindArchivedEndpoint:       FindArchivedEndpoint(svc),
 		FindEndpoint:               FindEndpoint(svc),
 		FindPublishedEndpoint:      FindPublishedEndpoint(svc),
@@ -28,10 +29,9 @@ func Endpoints(svc items.Items) EndpointsSet {
 		ListRevisionsEndpoint:      ListRevisionsEndpoint(svc),
 		PublishEndpoint:            PublishEndpoint(svc),
 		UnarchiveEndpoint:          UnarchiveEndpoint(svc),
+		UndeleteEndpoint:           UndeleteEndpoint(svc),
 		UnpublishEndpoint:          UnpublishEndpoint(svc),
 		UpdateEndpoint:             UpdateEndpoint(svc),
-		AggregateEndpoint:          AggregateEndpoint(svc),
-		AggregatePublishedEndpoint: AggregatePublishedEndpoint(svc),
 	}
 }
 
@@ -109,7 +109,7 @@ func UpdateEndpoint(svc items.Items) endpoint.Endpoint {
 func DeleteEndpoint(svc items.Items) endpoint.Endpoint {
 	return func(arg0 context.Context, request interface{}) (interface{}, error) {
 		req := request.(*DeleteRequest)
-		res0 := svc.Delete(arg0, req.SpaceId, req.EnvId, req.CollectionId, req.ItemId, req.Options...)
+		res0 := svc.Delete(arg0, req.Item, req.Options...)
 		return &DeleteResponse{}, res0
 	}
 }
@@ -117,7 +117,7 @@ func DeleteEndpoint(svc items.Items) endpoint.Endpoint {
 func UndeleteEndpoint(svc items.Items) endpoint.Endpoint {
 	return func(arg0 context.Context, request interface{}) (interface{}, error) {
 		req := request.(*UndeleteRequest)
-		res0 := svc.Undelete(arg0, req.SpaceId, req.EnvId, req.CollectionId, req.ItemId, req.Options...)
+		res0 := svc.Undelete(arg0, req.Item, req.Options...)
 		return &UndeleteResponse{}, res0
 	}
 }
@@ -204,17 +204,14 @@ func AggregateEndpoint(svc items.Items) endpoint.Endpoint {
 	return func(arg0 context.Context, request interface{}) (interface{}, error) {
 		req := request.(*AggregateRequest)
 		res0, res1 := svc.Aggregate(arg0, req.SpaceId, req.EnvId, req.CollectionId, req.Filter, req.Options...)
-		return &AggregateResponse{
-			Result: res0,
-		}, res1
+		return &AggregateResponse{Result: res0}, res1
 	}
 }
+
 func AggregatePublishedEndpoint(svc items.Items) endpoint.Endpoint {
 	return func(arg0 context.Context, request interface{}) (interface{}, error) {
 		req := request.(*AggregatePublishedRequest)
 		res0, res1 := svc.AggregatePublished(arg0, req.SpaceId, req.EnvId, req.CollectionId, req.Filter, req.Options...)
-		return &AggregatePublishedResponse{
-			Result: res0,
-		}, res1
+		return &AggregatePublishedResponse{Result: res0}, res1
 	}
 }
diff --git a/proto/items/items.pb.go b/proto/items/items.pb.go
index 40162ab74e97b2113239872d374e03dccd97d3cd..161f7772531618b3e2eb9220f13931f04f560a0b 100644
--- a/proto/items/items.pb.go
+++ b/proto/items/items.pb.go
@@ -359,7 +359,7 @@ func (x *Permissions) GetHardDelete() bool {
 	return false
 }
 
-// *
+//*
 // Пользовательская запись
 type Item struct {
 	state         protoimpl.MessageState
@@ -1219,7 +1219,8 @@ type DeleteOptions struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Erase bool `protobuf:"varint,1,opt,name=erase,proto3" json:"erase,omitempty"`
+	UpdateAttrs bool `protobuf:"varint,1,opt,name=update_attrs,json=updateAttrs,proto3" json:"update_attrs,omitempty"`
+	Erase       bool `protobuf:"varint,2,opt,name=erase,proto3" json:"erase,omitempty"`
 }
 
 func (x *DeleteOptions) Reset() {
@@ -1254,6 +1255,13 @@ func (*DeleteOptions) Descriptor() ([]byte, []int) {
 	return file_items_items_proto_rawDescGZIP(), []int{16}
 }
 
+func (x *DeleteOptions) GetUpdateAttrs() bool {
+	if x != nil {
+		return x.UpdateAttrs
+	}
+	return false
+}
+
 func (x *DeleteOptions) GetErase() bool {
 	if x != nil {
 		return x.Erase
@@ -1261,6 +1269,53 @@ func (x *DeleteOptions) GetErase() bool {
 	return false
 }
 
+type UndeleteOptions struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UpdateAttrs bool `protobuf:"varint,1,opt,name=update_attrs,json=updateAttrs,proto3" json:"update_attrs,omitempty"`
+}
+
+func (x *UndeleteOptions) Reset() {
+	*x = UndeleteOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_items_items_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *UndeleteOptions) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UndeleteOptions) ProtoMessage() {}
+
+func (x *UndeleteOptions) ProtoReflect() protoreflect.Message {
+	mi := &file_items_items_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use UndeleteOptions.ProtoReflect.Descriptor instead.
+func (*UndeleteOptions) Descriptor() ([]byte, []int) {
+	return file_items_items_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *UndeleteOptions) GetUpdateAttrs() bool {
+	if x != nil {
+		return x.UpdateAttrs
+	}
+	return false
+}
+
 type PublishOptions struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1272,7 +1327,7 @@ type PublishOptions struct {
 func (x *PublishOptions) Reset() {
 	*x = PublishOptions{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[17]
+		mi := &file_items_items_proto_msgTypes[18]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1285,7 +1340,7 @@ func (x *PublishOptions) String() string {
 func (*PublishOptions) ProtoMessage() {}
 
 func (x *PublishOptions) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[17]
+	mi := &file_items_items_proto_msgTypes[18]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1298,7 +1353,7 @@ func (x *PublishOptions) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use PublishOptions.ProtoReflect.Descriptor instead.
 func (*PublishOptions) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{17}
+	return file_items_items_proto_rawDescGZIP(), []int{18}
 }
 
 func (x *PublishOptions) GetUpdateAttrs() bool {
@@ -1308,6 +1363,53 @@ func (x *PublishOptions) GetUpdateAttrs() bool {
 	return false
 }
 
+type UnpublishOptions struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UpdateAttrs bool `protobuf:"varint,1,opt,name=update_attrs,json=updateAttrs,proto3" json:"update_attrs,omitempty"`
+}
+
+func (x *UnpublishOptions) Reset() {
+	*x = UnpublishOptions{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_items_items_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *UnpublishOptions) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UnpublishOptions) ProtoMessage() {}
+
+func (x *UnpublishOptions) ProtoReflect() protoreflect.Message {
+	mi := &file_items_items_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use UnpublishOptions.ProtoReflect.Descriptor instead.
+func (*UnpublishOptions) Descriptor() ([]byte, []int) {
+	return file_items_items_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *UnpublishOptions) GetUpdateAttrs() bool {
+	if x != nil {
+		return x.UpdateAttrs
+	}
+	return false
+}
+
 type FindPublishedOptions struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1323,7 +1425,7 @@ type FindPublishedOptions struct {
 func (x *FindPublishedOptions) Reset() {
 	*x = FindPublishedOptions{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[18]
+		mi := &file_items_items_proto_msgTypes[20]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1336,7 +1438,7 @@ func (x *FindPublishedOptions) String() string {
 func (*FindPublishedOptions) ProtoMessage() {}
 
 func (x *FindPublishedOptions) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[18]
+	mi := &file_items_items_proto_msgTypes[20]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1349,7 +1451,7 @@ func (x *FindPublishedOptions) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FindPublishedOptions.ProtoReflect.Descriptor instead.
 func (*FindPublishedOptions) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{18}
+	return file_items_items_proto_rawDescGZIP(), []int{20}
 }
 
 func (x *FindPublishedOptions) GetOptions() *common.FindOptions {
@@ -1398,7 +1500,7 @@ type FindArchivedOptions struct {
 func (x *FindArchivedOptions) Reset() {
 	*x = FindArchivedOptions{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[19]
+		mi := &file_items_items_proto_msgTypes[21]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1411,7 +1513,7 @@ func (x *FindArchivedOptions) String() string {
 func (*FindArchivedOptions) ProtoMessage() {}
 
 func (x *FindArchivedOptions) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[19]
+	mi := &file_items_items_proto_msgTypes[21]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1424,7 +1526,7 @@ func (x *FindArchivedOptions) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FindArchivedOptions.ProtoReflect.Descriptor instead.
 func (*FindArchivedOptions) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{19}
+	return file_items_items_proto_rawDescGZIP(), []int{21}
 }
 
 func (x *FindArchivedOptions) GetOptions() *common.FindOptions {
@@ -1445,7 +1547,7 @@ type ListRevisionsOptions struct {
 func (x *ListRevisionsOptions) Reset() {
 	*x = ListRevisionsOptions{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[20]
+		mi := &file_items_items_proto_msgTypes[22]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1458,7 +1560,7 @@ func (x *ListRevisionsOptions) String() string {
 func (*ListRevisionsOptions) ProtoMessage() {}
 
 func (x *ListRevisionsOptions) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[20]
+	mi := &file_items_items_proto_msgTypes[22]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1471,7 +1573,7 @@ func (x *ListRevisionsOptions) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListRevisionsOptions.ProtoReflect.Descriptor instead.
 func (*ListRevisionsOptions) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{20}
+	return file_items_items_proto_rawDescGZIP(), []int{22}
 }
 
 func (x *ListRevisionsOptions) GetOptions() *common.FindOptions {
@@ -1503,7 +1605,7 @@ type AggregateOptions struct {
 func (x *AggregateOptions) Reset() {
 	*x = AggregateOptions{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[21]
+		mi := &file_items_items_proto_msgTypes[23]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1516,7 +1618,7 @@ func (x *AggregateOptions) String() string {
 func (*AggregateOptions) ProtoMessage() {}
 
 func (x *AggregateOptions) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[21]
+	mi := &file_items_items_proto_msgTypes[23]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1529,7 +1631,7 @@ func (x *AggregateOptions) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AggregateOptions.ProtoReflect.Descriptor instead.
 func (*AggregateOptions) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{21}
+	return file_items_items_proto_rawDescGZIP(), []int{23}
 }
 
 func (x *AggregateOptions) GetFields() map[string]string {
@@ -1550,7 +1652,7 @@ type AggregatePublishedOptions struct {
 func (x *AggregatePublishedOptions) Reset() {
 	*x = AggregatePublishedOptions{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[22]
+		mi := &file_items_items_proto_msgTypes[24]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1563,7 +1665,7 @@ func (x *AggregatePublishedOptions) String() string {
 func (*AggregatePublishedOptions) ProtoMessage() {}
 
 func (x *AggregatePublishedOptions) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[22]
+	mi := &file_items_items_proto_msgTypes[24]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1576,7 +1678,7 @@ func (x *AggregatePublishedOptions) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AggregatePublishedOptions.ProtoReflect.Descriptor instead.
 func (*AggregatePublishedOptions) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{22}
+	return file_items_items_proto_rawDescGZIP(), []int{24}
 }
 
 func (x *AggregatePublishedOptions) GetFields() map[string]string {
@@ -1598,7 +1700,7 @@ type CreateRequest struct {
 func (x *CreateRequest) Reset() {
 	*x = CreateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[23]
+		mi := &file_items_items_proto_msgTypes[25]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1611,7 +1713,7 @@ func (x *CreateRequest) String() string {
 func (*CreateRequest) ProtoMessage() {}
 
 func (x *CreateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[23]
+	mi := &file_items_items_proto_msgTypes[25]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1624,7 +1726,7 @@ func (x *CreateRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateRequest.ProtoReflect.Descriptor instead.
 func (*CreateRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{23}
+	return file_items_items_proto_rawDescGZIP(), []int{25}
 }
 
 func (x *CreateRequest) GetItem() *Item {
@@ -1652,7 +1754,7 @@ type CreateResponse struct {
 func (x *CreateResponse) Reset() {
 	*x = CreateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[24]
+		mi := &file_items_items_proto_msgTypes[26]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1665,7 +1767,7 @@ func (x *CreateResponse) String() string {
 func (*CreateResponse) ProtoMessage() {}
 
 func (x *CreateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[24]
+	mi := &file_items_items_proto_msgTypes[26]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1678,7 +1780,7 @@ func (x *CreateResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateResponse.ProtoReflect.Descriptor instead.
 func (*CreateResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{24}
+	return file_items_items_proto_rawDescGZIP(), []int{26}
 }
 
 func (x *CreateResponse) GetCreated() *Item {
@@ -1699,7 +1801,7 @@ type IntrospectRequest struct {
 func (x *IntrospectRequest) Reset() {
 	*x = IntrospectRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[25]
+		mi := &file_items_items_proto_msgTypes[27]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1712,7 +1814,7 @@ func (x *IntrospectRequest) String() string {
 func (*IntrospectRequest) ProtoMessage() {}
 
 func (x *IntrospectRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[25]
+	mi := &file_items_items_proto_msgTypes[27]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1725,7 +1827,7 @@ func (x *IntrospectRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use IntrospectRequest.ProtoReflect.Descriptor instead.
 func (*IntrospectRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{25}
+	return file_items_items_proto_rawDescGZIP(), []int{27}
 }
 
 func (x *IntrospectRequest) GetItem() *Item {
@@ -1748,7 +1850,7 @@ type IntrospectResponse struct {
 func (x *IntrospectResponse) Reset() {
 	*x = IntrospectResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[26]
+		mi := &file_items_items_proto_msgTypes[28]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1761,7 +1863,7 @@ func (x *IntrospectResponse) String() string {
 func (*IntrospectResponse) ProtoMessage() {}
 
 func (x *IntrospectResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[26]
+	mi := &file_items_items_proto_msgTypes[28]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1774,7 +1876,7 @@ func (x *IntrospectResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use IntrospectResponse.ProtoReflect.Descriptor instead.
 func (*IntrospectResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{26}
+	return file_items_items_proto_rawDescGZIP(), []int{28}
 }
 
 func (x *IntrospectResponse) GetItem() *Item {
@@ -1812,7 +1914,7 @@ type GetRequest struct {
 func (x *GetRequest) Reset() {
 	*x = GetRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[27]
+		mi := &file_items_items_proto_msgTypes[29]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1825,7 +1927,7 @@ func (x *GetRequest) String() string {
 func (*GetRequest) ProtoMessage() {}
 
 func (x *GetRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[27]
+	mi := &file_items_items_proto_msgTypes[29]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1838,7 +1940,7 @@ func (x *GetRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetRequest.ProtoReflect.Descriptor instead.
 func (*GetRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{27}
+	return file_items_items_proto_rawDescGZIP(), []int{29}
 }
 
 func (x *GetRequest) GetSpaceId() string {
@@ -1880,7 +1982,7 @@ type GetResponse struct {
 func (x *GetResponse) Reset() {
 	*x = GetResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[28]
+		mi := &file_items_items_proto_msgTypes[30]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1893,7 +1995,7 @@ func (x *GetResponse) String() string {
 func (*GetResponse) ProtoMessage() {}
 
 func (x *GetResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[28]
+	mi := &file_items_items_proto_msgTypes[30]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1906,7 +2008,7 @@ func (x *GetResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetResponse.ProtoReflect.Descriptor instead.
 func (*GetResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{28}
+	return file_items_items_proto_rawDescGZIP(), []int{30}
 }
 
 func (x *GetResponse) GetItem() *Item {
@@ -1931,7 +2033,7 @@ type FindRequest struct {
 func (x *FindRequest) Reset() {
 	*x = FindRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[29]
+		mi := &file_items_items_proto_msgTypes[31]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1944,7 +2046,7 @@ func (x *FindRequest) String() string {
 func (*FindRequest) ProtoMessage() {}
 
 func (x *FindRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[29]
+	mi := &file_items_items_proto_msgTypes[31]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1957,7 +2059,7 @@ func (x *FindRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FindRequest.ProtoReflect.Descriptor instead.
 func (*FindRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{29}
+	return file_items_items_proto_rawDescGZIP(), []int{31}
 }
 
 func (x *FindRequest) GetSpaceId() string {
@@ -2007,7 +2109,7 @@ type FindResponse struct {
 func (x *FindResponse) Reset() {
 	*x = FindResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[30]
+		mi := &file_items_items_proto_msgTypes[32]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2020,7 +2122,7 @@ func (x *FindResponse) String() string {
 func (*FindResponse) ProtoMessage() {}
 
 func (x *FindResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[30]
+	mi := &file_items_items_proto_msgTypes[32]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2033,7 +2135,7 @@ func (x *FindResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FindResponse.ProtoReflect.Descriptor instead.
 func (*FindResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{30}
+	return file_items_items_proto_rawDescGZIP(), []int{32}
 }
 
 func (x *FindResponse) GetItems() []*Item {
@@ -2062,7 +2164,7 @@ type UpdateRequest struct {
 func (x *UpdateRequest) Reset() {
 	*x = UpdateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[31]
+		mi := &file_items_items_proto_msgTypes[33]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2075,7 +2177,7 @@ func (x *UpdateRequest) String() string {
 func (*UpdateRequest) ProtoMessage() {}
 
 func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[31]
+	mi := &file_items_items_proto_msgTypes[33]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2088,7 +2190,7 @@ func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateRequest.ProtoReflect.Descriptor instead.
 func (*UpdateRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{31}
+	return file_items_items_proto_rawDescGZIP(), []int{33}
 }
 
 func (x *UpdateRequest) GetItem() *Item {
@@ -2110,17 +2212,14 @@ type DeleteRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	SpaceId      string         `protobuf:"bytes,1,opt,name=space_id,json=spaceId,proto3" json:"space_id,omitempty"`
-	EnvId        string         `protobuf:"bytes,2,opt,name=env_id,json=envId,proto3" json:"env_id,omitempty"`
-	CollectionId string         `protobuf:"bytes,3,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"`
-	ItemId       string         `protobuf:"bytes,4,opt,name=item_id,json=itemId,proto3" json:"item_id,omitempty"`
-	Options      *DeleteOptions `protobuf:"bytes,5,opt,name=options,proto3" json:"options,omitempty"`
+	Item    *Item          `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
+	Options *DeleteOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"`
 }
 
 func (x *DeleteRequest) Reset() {
 	*x = DeleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[32]
+		mi := &file_items_items_proto_msgTypes[34]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2133,7 +2232,7 @@ func (x *DeleteRequest) String() string {
 func (*DeleteRequest) ProtoMessage() {}
 
 func (x *DeleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[32]
+	mi := &file_items_items_proto_msgTypes[34]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2146,35 +2245,14 @@ func (x *DeleteRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteRequest.ProtoReflect.Descriptor instead.
 func (*DeleteRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{32}
-}
-
-func (x *DeleteRequest) GetSpaceId() string {
-	if x != nil {
-		return x.SpaceId
-	}
-	return ""
-}
-
-func (x *DeleteRequest) GetEnvId() string {
-	if x != nil {
-		return x.EnvId
-	}
-	return ""
-}
-
-func (x *DeleteRequest) GetCollectionId() string {
-	if x != nil {
-		return x.CollectionId
-	}
-	return ""
+	return file_items_items_proto_rawDescGZIP(), []int{34}
 }
 
-func (x *DeleteRequest) GetItemId() string {
+func (x *DeleteRequest) GetItem() *Item {
 	if x != nil {
-		return x.ItemId
+		return x.Item
 	}
-	return ""
+	return nil
 }
 
 func (x *DeleteRequest) GetOptions() *DeleteOptions {
@@ -2189,16 +2267,14 @@ type UndeleteRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	SpaceId      string `protobuf:"bytes,1,opt,name=space_id,json=spaceId,proto3" json:"space_id,omitempty"`
-	EnvId        string `protobuf:"bytes,2,opt,name=env_id,json=envId,proto3" json:"env_id,omitempty"`
-	CollectionId string `protobuf:"bytes,3,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"`
-	ItemId       string `protobuf:"bytes,4,opt,name=item_id,json=itemId,proto3" json:"item_id,omitempty"`
+	Item    *Item            `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
+	Options *UndeleteOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"`
 }
 
 func (x *UndeleteRequest) Reset() {
 	*x = UndeleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[33]
+		mi := &file_items_items_proto_msgTypes[35]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2211,7 +2287,7 @@ func (x *UndeleteRequest) String() string {
 func (*UndeleteRequest) ProtoMessage() {}
 
 func (x *UndeleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[33]
+	mi := &file_items_items_proto_msgTypes[35]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2224,35 +2300,21 @@ func (x *UndeleteRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UndeleteRequest.ProtoReflect.Descriptor instead.
 func (*UndeleteRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{33}
-}
-
-func (x *UndeleteRequest) GetSpaceId() string {
-	if x != nil {
-		return x.SpaceId
-	}
-	return ""
-}
-
-func (x *UndeleteRequest) GetEnvId() string {
-	if x != nil {
-		return x.EnvId
-	}
-	return ""
+	return file_items_items_proto_rawDescGZIP(), []int{35}
 }
 
-func (x *UndeleteRequest) GetCollectionId() string {
+func (x *UndeleteRequest) GetItem() *Item {
 	if x != nil {
-		return x.CollectionId
+		return x.Item
 	}
-	return ""
+	return nil
 }
 
-func (x *UndeleteRequest) GetItemId() string {
+func (x *UndeleteRequest) GetOptions() *UndeleteOptions {
 	if x != nil {
-		return x.ItemId
+		return x.Options
 	}
-	return ""
+	return nil
 }
 
 type PublishRequest struct {
@@ -2267,7 +2329,7 @@ type PublishRequest struct {
 func (x *PublishRequest) Reset() {
 	*x = PublishRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[34]
+		mi := &file_items_items_proto_msgTypes[36]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2280,7 +2342,7 @@ func (x *PublishRequest) String() string {
 func (*PublishRequest) ProtoMessage() {}
 
 func (x *PublishRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[34]
+	mi := &file_items_items_proto_msgTypes[36]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2293,7 +2355,7 @@ func (x *PublishRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use PublishRequest.ProtoReflect.Descriptor instead.
 func (*PublishRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{34}
+	return file_items_items_proto_rawDescGZIP(), []int{36}
 }
 
 func (x *PublishRequest) GetItem() *Item {
@@ -2315,13 +2377,14 @@ type UnpublishRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Item *Item `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
+	Item    *Item             `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
+	Options *UnpublishOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"`
 }
 
 func (x *UnpublishRequest) Reset() {
 	*x = UnpublishRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[35]
+		mi := &file_items_items_proto_msgTypes[37]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2334,7 +2397,7 @@ func (x *UnpublishRequest) String() string {
 func (*UnpublishRequest) ProtoMessage() {}
 
 func (x *UnpublishRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[35]
+	mi := &file_items_items_proto_msgTypes[37]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2347,7 +2410,7 @@ func (x *UnpublishRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UnpublishRequest.ProtoReflect.Descriptor instead.
 func (*UnpublishRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{35}
+	return file_items_items_proto_rawDescGZIP(), []int{37}
 }
 
 func (x *UnpublishRequest) GetItem() *Item {
@@ -2357,6 +2420,13 @@ func (x *UnpublishRequest) GetItem() *Item {
 	return nil
 }
 
+func (x *UnpublishRequest) GetOptions() *UnpublishOptions {
+	if x != nil {
+		return x.Options
+	}
+	return nil
+}
+
 type GetPublishedRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -2372,7 +2442,7 @@ type GetPublishedRequest struct {
 func (x *GetPublishedRequest) Reset() {
 	*x = GetPublishedRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[36]
+		mi := &file_items_items_proto_msgTypes[38]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2385,7 +2455,7 @@ func (x *GetPublishedRequest) String() string {
 func (*GetPublishedRequest) ProtoMessage() {}
 
 func (x *GetPublishedRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[36]
+	mi := &file_items_items_proto_msgTypes[38]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2398,7 +2468,7 @@ func (x *GetPublishedRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetPublishedRequest.ProtoReflect.Descriptor instead.
 func (*GetPublishedRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{36}
+	return file_items_items_proto_rawDescGZIP(), []int{38}
 }
 
 func (x *GetPublishedRequest) GetSpaceId() string {
@@ -2447,7 +2517,7 @@ type GetPublishedResponse struct {
 func (x *GetPublishedResponse) Reset() {
 	*x = GetPublishedResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[37]
+		mi := &file_items_items_proto_msgTypes[39]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2460,7 +2530,7 @@ func (x *GetPublishedResponse) String() string {
 func (*GetPublishedResponse) ProtoMessage() {}
 
 func (x *GetPublishedResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[37]
+	mi := &file_items_items_proto_msgTypes[39]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2473,7 +2543,7 @@ func (x *GetPublishedResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetPublishedResponse.ProtoReflect.Descriptor instead.
 func (*GetPublishedResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{37}
+	return file_items_items_proto_rawDescGZIP(), []int{39}
 }
 
 func (x *GetPublishedResponse) GetItem() *Item {
@@ -2498,7 +2568,7 @@ type FindPublishedRequest struct {
 func (x *FindPublishedRequest) Reset() {
 	*x = FindPublishedRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[38]
+		mi := &file_items_items_proto_msgTypes[40]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2511,7 +2581,7 @@ func (x *FindPublishedRequest) String() string {
 func (*FindPublishedRequest) ProtoMessage() {}
 
 func (x *FindPublishedRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[38]
+	mi := &file_items_items_proto_msgTypes[40]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2524,7 +2594,7 @@ func (x *FindPublishedRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FindPublishedRequest.ProtoReflect.Descriptor instead.
 func (*FindPublishedRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{38}
+	return file_items_items_proto_rawDescGZIP(), []int{40}
 }
 
 func (x *FindPublishedRequest) GetSpaceId() string {
@@ -2574,7 +2644,7 @@ type FindPublishedResponse struct {
 func (x *FindPublishedResponse) Reset() {
 	*x = FindPublishedResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[39]
+		mi := &file_items_items_proto_msgTypes[41]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2587,7 +2657,7 @@ func (x *FindPublishedResponse) String() string {
 func (*FindPublishedResponse) ProtoMessage() {}
 
 func (x *FindPublishedResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[39]
+	mi := &file_items_items_proto_msgTypes[41]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2600,7 +2670,7 @@ func (x *FindPublishedResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FindPublishedResponse.ProtoReflect.Descriptor instead.
 func (*FindPublishedResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{39}
+	return file_items_items_proto_rawDescGZIP(), []int{41}
 }
 
 func (x *FindPublishedResponse) GetItems() []*Item {
@@ -2632,7 +2702,7 @@ type AggregateRequest struct {
 func (x *AggregateRequest) Reset() {
 	*x = AggregateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[40]
+		mi := &file_items_items_proto_msgTypes[42]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2645,7 +2715,7 @@ func (x *AggregateRequest) String() string {
 func (*AggregateRequest) ProtoMessage() {}
 
 func (x *AggregateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[40]
+	mi := &file_items_items_proto_msgTypes[42]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2658,7 +2728,7 @@ func (x *AggregateRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AggregateRequest.ProtoReflect.Descriptor instead.
 func (*AggregateRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{40}
+	return file_items_items_proto_rawDescGZIP(), []int{42}
 }
 
 func (x *AggregateRequest) GetSpaceId() string {
@@ -2696,7 +2766,7 @@ func (x *AggregateRequest) GetOptions() *AggregateOptions {
 	return nil
 }
 
-// *
+//*
 // Содержит в себе набор `название:значение`. Название соответствует переданному в AggregateOptions ключу.
 type AggregateResponse struct {
 	state         protoimpl.MessageState
@@ -2709,7 +2779,7 @@ type AggregateResponse struct {
 func (x *AggregateResponse) Reset() {
 	*x = AggregateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[41]
+		mi := &file_items_items_proto_msgTypes[43]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2722,7 +2792,7 @@ func (x *AggregateResponse) String() string {
 func (*AggregateResponse) ProtoMessage() {}
 
 func (x *AggregateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[41]
+	mi := &file_items_items_proto_msgTypes[43]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2735,7 +2805,7 @@ func (x *AggregateResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AggregateResponse.ProtoReflect.Descriptor instead.
 func (*AggregateResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{41}
+	return file_items_items_proto_rawDescGZIP(), []int{43}
 }
 
 func (x *AggregateResponse) GetResult() *structpb.Struct {
@@ -2760,7 +2830,7 @@ type AggregatePublishedRequest struct {
 func (x *AggregatePublishedRequest) Reset() {
 	*x = AggregatePublishedRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[42]
+		mi := &file_items_items_proto_msgTypes[44]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2773,7 +2843,7 @@ func (x *AggregatePublishedRequest) String() string {
 func (*AggregatePublishedRequest) ProtoMessage() {}
 
 func (x *AggregatePublishedRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[42]
+	mi := &file_items_items_proto_msgTypes[44]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2786,7 +2856,7 @@ func (x *AggregatePublishedRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AggregatePublishedRequest.ProtoReflect.Descriptor instead.
 func (*AggregatePublishedRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{42}
+	return file_items_items_proto_rawDescGZIP(), []int{44}
 }
 
 func (x *AggregatePublishedRequest) GetSpaceId() string {
@@ -2835,7 +2905,7 @@ type AggregatePublishedResponse struct {
 func (x *AggregatePublishedResponse) Reset() {
 	*x = AggregatePublishedResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[43]
+		mi := &file_items_items_proto_msgTypes[45]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2848,7 +2918,7 @@ func (x *AggregatePublishedResponse) String() string {
 func (*AggregatePublishedResponse) ProtoMessage() {}
 
 func (x *AggregatePublishedResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[43]
+	mi := &file_items_items_proto_msgTypes[45]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2861,7 +2931,7 @@ func (x *AggregatePublishedResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AggregatePublishedResponse.ProtoReflect.Descriptor instead.
 func (*AggregatePublishedResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{43}
+	return file_items_items_proto_rawDescGZIP(), []int{45}
 }
 
 func (x *AggregatePublishedResponse) GetResult() *structpb.Struct {
@@ -2886,7 +2956,7 @@ type GetRevisionRequest struct {
 func (x *GetRevisionRequest) Reset() {
 	*x = GetRevisionRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[44]
+		mi := &file_items_items_proto_msgTypes[46]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2899,7 +2969,7 @@ func (x *GetRevisionRequest) String() string {
 func (*GetRevisionRequest) ProtoMessage() {}
 
 func (x *GetRevisionRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[44]
+	mi := &file_items_items_proto_msgTypes[46]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2912,7 +2982,7 @@ func (x *GetRevisionRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetRevisionRequest.ProtoReflect.Descriptor instead.
 func (*GetRevisionRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{44}
+	return file_items_items_proto_rawDescGZIP(), []int{46}
 }
 
 func (x *GetRevisionRequest) GetSpaceId() string {
@@ -2961,7 +3031,7 @@ type GetRevisionResponse struct {
 func (x *GetRevisionResponse) Reset() {
 	*x = GetRevisionResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[45]
+		mi := &file_items_items_proto_msgTypes[47]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2974,7 +3044,7 @@ func (x *GetRevisionResponse) String() string {
 func (*GetRevisionResponse) ProtoMessage() {}
 
 func (x *GetRevisionResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[45]
+	mi := &file_items_items_proto_msgTypes[47]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2987,7 +3057,7 @@ func (x *GetRevisionResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetRevisionResponse.ProtoReflect.Descriptor instead.
 func (*GetRevisionResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{45}
+	return file_items_items_proto_rawDescGZIP(), []int{47}
 }
 
 func (x *GetRevisionResponse) GetItem() *Item {
@@ -3012,7 +3082,7 @@ type ListRevisionsRequest struct {
 func (x *ListRevisionsRequest) Reset() {
 	*x = ListRevisionsRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[46]
+		mi := &file_items_items_proto_msgTypes[48]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3025,7 +3095,7 @@ func (x *ListRevisionsRequest) String() string {
 func (*ListRevisionsRequest) ProtoMessage() {}
 
 func (x *ListRevisionsRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[46]
+	mi := &file_items_items_proto_msgTypes[48]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3038,7 +3108,7 @@ func (x *ListRevisionsRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListRevisionsRequest.ProtoReflect.Descriptor instead.
 func (*ListRevisionsRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{46}
+	return file_items_items_proto_rawDescGZIP(), []int{48}
 }
 
 func (x *ListRevisionsRequest) GetSpaceId() string {
@@ -3087,7 +3157,7 @@ type ListRevisionsResponse struct {
 func (x *ListRevisionsResponse) Reset() {
 	*x = ListRevisionsResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[47]
+		mi := &file_items_items_proto_msgTypes[49]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3100,7 +3170,7 @@ func (x *ListRevisionsResponse) String() string {
 func (*ListRevisionsResponse) ProtoMessage() {}
 
 func (x *ListRevisionsResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[47]
+	mi := &file_items_items_proto_msgTypes[49]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3113,7 +3183,7 @@ func (x *ListRevisionsResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListRevisionsResponse.ProtoReflect.Descriptor instead.
 func (*ListRevisionsResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{47}
+	return file_items_items_proto_rawDescGZIP(), []int{49}
 }
 
 func (x *ListRevisionsResponse) GetItems() []*Item {
@@ -3123,7 +3193,7 @@ func (x *ListRevisionsResponse) GetItems() []*Item {
 	return nil
 }
 
-// *
+//*
 // Запрос на архивирование элемента
 type ArchiveRequest struct {
 	state         protoimpl.MessageState
@@ -3136,7 +3206,7 @@ type ArchiveRequest struct {
 func (x *ArchiveRequest) Reset() {
 	*x = ArchiveRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[48]
+		mi := &file_items_items_proto_msgTypes[50]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3149,7 +3219,7 @@ func (x *ArchiveRequest) String() string {
 func (*ArchiveRequest) ProtoMessage() {}
 
 func (x *ArchiveRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[48]
+	mi := &file_items_items_proto_msgTypes[50]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3162,7 +3232,7 @@ func (x *ArchiveRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ArchiveRequest.ProtoReflect.Descriptor instead.
 func (*ArchiveRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{48}
+	return file_items_items_proto_rawDescGZIP(), []int{50}
 }
 
 func (x *ArchiveRequest) GetItem() *Item {
@@ -3183,7 +3253,7 @@ type UnarchiveRequest struct {
 func (x *UnarchiveRequest) Reset() {
 	*x = UnarchiveRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[49]
+		mi := &file_items_items_proto_msgTypes[51]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3196,7 +3266,7 @@ func (x *UnarchiveRequest) String() string {
 func (*UnarchiveRequest) ProtoMessage() {}
 
 func (x *UnarchiveRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[49]
+	mi := &file_items_items_proto_msgTypes[51]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3209,7 +3279,7 @@ func (x *UnarchiveRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UnarchiveRequest.ProtoReflect.Descriptor instead.
 func (*UnarchiveRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{49}
+	return file_items_items_proto_rawDescGZIP(), []int{51}
 }
 
 func (x *UnarchiveRequest) GetItem() *Item {
@@ -3234,7 +3304,7 @@ type FindArchivedRequest struct {
 func (x *FindArchivedRequest) Reset() {
 	*x = FindArchivedRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[50]
+		mi := &file_items_items_proto_msgTypes[52]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3247,7 +3317,7 @@ func (x *FindArchivedRequest) String() string {
 func (*FindArchivedRequest) ProtoMessage() {}
 
 func (x *FindArchivedRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[50]
+	mi := &file_items_items_proto_msgTypes[52]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3260,7 +3330,7 @@ func (x *FindArchivedRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FindArchivedRequest.ProtoReflect.Descriptor instead.
 func (*FindArchivedRequest) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{50}
+	return file_items_items_proto_rawDescGZIP(), []int{52}
 }
 
 func (x *FindArchivedRequest) GetSpaceId() string {
@@ -3310,7 +3380,7 @@ type FindArchivedResponse struct {
 func (x *FindArchivedResponse) Reset() {
 	*x = FindArchivedResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_items_items_proto_msgTypes[51]
+		mi := &file_items_items_proto_msgTypes[53]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3323,7 +3393,7 @@ func (x *FindArchivedResponse) String() string {
 func (*FindArchivedResponse) ProtoMessage() {}
 
 func (x *FindArchivedResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_items_items_proto_msgTypes[51]
+	mi := &file_items_items_proto_msgTypes[53]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3336,7 +3406,7 @@ func (x *FindArchivedResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FindArchivedResponse.ProtoReflect.Descriptor instead.
 func (*FindArchivedResponse) Descriptor() ([]byte, []int) {
-	return file_items_items_proto_rawDescGZIP(), []int{51}
+	return file_items_items_proto_rawDescGZIP(), []int{53}
 }
 
 func (x *FindArchivedResponse) GetItems() []*Item {
@@ -3522,9 +3592,18 @@ var file_items_items_proto_rawDesc = []byte{
 	0x22, 0x32, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64,
 	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
 	0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61,
-	0x6c, 0x65, 0x49, 0x64, 0x22, 0x25, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x70,
-	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x61, 0x73, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x72, 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x0e, 0x50,
+	0x6c, 0x65, 0x49, 0x64, 0x22, 0x48, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
+	0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x61, 0x73,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x72, 0x61, 0x73, 0x65, 0x22, 0x34,
+	0x0a, 0x0f, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72,
+	0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41,
+	0x74, 0x74, 0x72, 0x73, 0x22, 0x33, 0x0a, 0x0e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x5f, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x73, 0x22, 0x35, 0x0a, 0x10, 0x55, 0x6e, 0x70,
 	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a,
 	0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x01, 0x20,
 	0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x73,
@@ -3630,93 +3709,73 @@ var file_items_items_proto_rawDesc = []byte{
 	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f,
 	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61,
 	0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12,
-	0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63,
-	0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69,
-	0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x74,
-	0x65, 0x6d, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
-	0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69,
-	0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x81, 0x01, 0x0a,
-	0x0f, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65,
-	0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76,
-	0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-	0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f,
-	0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64,
-	0x22, 0x72, 0x0a, 0x0e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x6e, 0x73, 0x22, 0x70, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d,
+	0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0x36, 0x0a, 0x07,
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x22, 0x74, 0x0a, 0x0f, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
+	0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d,
+	0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d,
+	0x73, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x72, 0x0a, 0x0e, 0x50, 0x75,
+	0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04,
+	0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52,
+	0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x76,
+	0x0a, 0x10, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
 	0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
 	0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73,
-	0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0x37, 0x0a, 0x07, 0x6f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63,
-	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x50, 0x75, 0x62,
-	0x6c, 0x69, 0x73, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3b, 0x0a, 0x10, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73,
-	0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-	0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65,
-	0x6d, 0x22, 0xc3, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
-	0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x61,
-	0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x61,
-	0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63,
-	0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64,
-	0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x07, 0x6f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x6e,
-	0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75,
-	0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07,
-	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x75,
-	0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x27, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
-	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74,
-	0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x22, 0xdb, 0x01, 0x0a, 0x14, 0x46, 0x69, 0x6e,
-	0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06,
-	0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e,
-	0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
-	0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c,
-	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74,
-	0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52,
-	0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x75, 0x62,
-	0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x58, 0x0a, 0x15, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x75,
-	0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13,
-	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49,
-	0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f,
-	0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c,
-	0x22, 0xd3, 0x01, 0x0a, 0x10, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64,
-	0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
-	0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x06,
-	0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63,
-	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6c,
-	0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x07, 0x6f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63,
-	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x41, 0x67, 0x67,
-	0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x44, 0x0a, 0x11, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67,
-	0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x72,
-	0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 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, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xe5, 0x01, 0x0a,
-	0x19, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73,
-	0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70,
+	0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0x39, 0x0a, 0x07, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x55, 0x6e, 0x70,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x75,
+	0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19,
+	0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76,
+	0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64,
+	0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+	0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x3c,
+	0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e,
+	0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3f, 0x0a, 0x14,
+	0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65,
+	0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x22, 0xdb, 0x01,
+	0x0a, 0x14, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f,
+	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49,
+	0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c,
+	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a,
+	0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69,
+	0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x07,
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69,
+	0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x58, 0x0a, 0x15, 0x46,
+	0x69, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12,
+	0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
+	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xd3, 0x01, 0x0a, 0x10, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67,
+	0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70,
 	0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70,
 	0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18,
 	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d,
@@ -3725,167 +3784,185 @@ var file_items_items_proto_rawDesc = []byte{
 	0x64, 0x12, 0x2d, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28,
 	0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d,
 	0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
-	0x12, 0x42, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d,
-	0x73, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69,
-	0x73, 0x68, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4d, 0x0a, 0x1a, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
-	0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 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, 0x06, 0x72, 0x65, 0x73,
-	0x75, 0x6c, 0x74, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73,
-	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70,
-	0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70,
-	0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d,
-	0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49,
-	0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65,
-	0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x3e, 0x0a, 0x13, 0x47,
-	0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d,
+	0x73, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x44, 0x0a, 0x11, 0x41,
+	0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x2f, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 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, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
+	0x74, 0x22, 0xe5, 0x01, 0x0a, 0x19, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x50,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x19, 0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e,
+	0x76, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49,
+	0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66,
+	0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65,
+	0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4d, 0x0a, 0x1a, 0x41, 0x67, 0x67,
+	0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
+	0x74, 0x18, 0x01, 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, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74,
+	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x19, 0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e,
+	0x76, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49,
+	0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69,
+	0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12,
+	0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64,
+	0x22, 0x3e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
+	0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d,
+	0x22, 0xc5, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x61,
+	0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x61,
+	0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63,
+	0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64,
+	0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+	0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x42, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
 	0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73,
-	0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x22, 0xc5, 0x01, 0x0a, 0x14,
-	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12,
-	0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63,
-	0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69,
-	0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x74,
-	0x65, 0x6d, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
-	0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69,
-	0x6f, 0x6e, 0x73, 0x22, 0x42, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73,
-	0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05,
-	0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f,
-	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d,
-	0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x39, 0x0a, 0x0e, 0x41, 0x72, 0x63, 0x68, 0x69,
-	0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x74, 0x65,
-	0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74,
-	0x65, 0x6d, 0x22, 0x3b, 0x0a, 0x10, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69,
-	0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x22,
-	0xd9, 0x01, 0x0a, 0x13, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65,
-	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x70, 0x61, 0x63, 0x65,
-	0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c,
-	0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d,
-	0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
-	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46,
-	0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a,
-	0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22,
-	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46,
-	0x69, 0x6e, 0x64, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x57, 0x0a, 0x14, 0x46,
-	0x69, 0x6e, 0x64, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65,
-	0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x14,
-	0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74,
-	0x6f, 0x74, 0x61, 0x6c, 0x32, 0x93, 0x0b, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x47,
-	0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-	0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0a, 0x49, 0x6e, 0x74, 0x72, 0x6f,
-	0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
-	0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65,
-	0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x03,
-	0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74,
-	0x65, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a,
+	0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x39, 0x0a, 0x0e,
+	0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27,
+	0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65,
+	0x6d, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3b, 0x0a, 0x10, 0x55, 0x6e, 0x61, 0x72, 0x63,
+	0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x69,
+	0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04,
+	0x69, 0x74, 0x65, 0x6d, 0x22, 0xd9, 0x01, 0x0a, 0x13, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x63,
+	0x68, 0x69, 0x76, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08,
+	0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+	0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x76, 0x5f, 0x69,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x49, 0x64, 0x12, 0x23,
+	0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74,
+	0x65, 0x72, 0x12, 0x3c, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64,
+	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x22, 0x57, 0x0a, 0x14, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d,
+	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x32, 0x93, 0x0b, 0x0a, 0x05, 0x49, 0x74,
+	0x65, 0x6d, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x2e,
+	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x43, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0a,
+	0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x72, 0x6f,
+	0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x49, 0x6e, 0x74,
+	0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x12, 0x3e, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x12, 0x41, 0x0a, 0x04, 0x46, 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
+	0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c,
+	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
+	0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x12, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73,
+	0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x08, 0x55, 0x6e, 0x64, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69,
+	0x74, 0x65, 0x6d, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x42,
+	0x0a, 0x07, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73,
+	0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
+	0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12,
+	0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e,
+	0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0c, 0x47, 0x65,
+	0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75,
+	0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23,
 	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x47,
-	0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x04,
-	0x46, 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69,
-	0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73,
-	0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
-	0x40, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
-	0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
-	0x00, 0x12, 0x40, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x63, 0x6f,
-	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65,
-	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
-	0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x08, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12,
-	0x1e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e,
-	0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
-	0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x50, 0x75, 0x62,
-	0x6c, 0x69, 0x73, 0x68, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69,
-	0x74, 0x65, 0x6d, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x46, 0x0a,
-	0x09, 0x55, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e,
-	0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x55, 0x6e, 0x70, 0x75, 0x62,
-	0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
-	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
-	0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c,
-	0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
-	0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
-	0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
-	0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62,
-	0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x12, 0x5c, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65,
-	0x64, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d,
-	0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x75, 0x62,
+	0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
 	0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69,
-	0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50,
-	0x0a, 0x09, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x63, 0x6f,
+	0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64,
+	0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65,
+	0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73,
+	0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d,
+	0x73, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x12, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
+	0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x2e, 0x63, 0x6f,
 	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x41, 0x67, 0x67, 0x72,
-	0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63,
-	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x41, 0x67, 0x67,
-	0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x12, 0x6b, 0x0a, 0x12, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62,
-	0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-	0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65,
-	0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73,
-	0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73,
-	0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a,
-	0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x63,
-	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74,
-	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e,
-	0x47, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76,
-	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-	0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73,
-	0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f,
+	0x65, 0x67, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
+	0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x50,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x56, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+	0x6e, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d,
+	0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69,
+	0x74, 0x65, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0d, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x2e, 0x63, 0x6f,
 	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74,
-	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x1d,
-	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x41,
-	0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
-	0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0c, 0x46, 0x69, 0x6e, 0x64, 0x41,
-	0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
-	0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x63, 0x68,
-	0x69, 0x76, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f,
-	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64,
-	0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12,
-	0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e,
-	0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
-	0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69,
-	0x74, 0x2e, 0x70, 0x65, 0x72, 0x78, 0x2e, 0x72, 0x75, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73,
-	0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2d, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x3b, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x62, 0x06, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x33,
+	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73,
+	0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x07, 0x41, 0x72, 0x63, 0x68,
+	0x69, 0x76, 0x65, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0c,
+	0x46, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x22, 0x2e, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2e, 0x46, 0x69, 0x6e,
+	0x64, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x74, 0x65, 0x6d, 0x73,
+	0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x55, 0x6e, 0x61, 0x72, 0x63,
+	0x68, 0x69, 0x76, 0x65, 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x69,
+	0x74, 0x65, 0x6d, 0x73, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42,
+	0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x2e, 0x70, 0x65, 0x72, 0x78, 0x2e, 0x72, 0x75, 0x2f, 0x70,
+	0x65, 0x72, 0x78, 0x69, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2d, 0x67, 0x6f, 0x2f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x3b, 0x69, 0x74, 0x65, 0x6d,
+	0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -3901,7 +3978,7 @@ func file_items_items_proto_rawDescGZIP() []byte {
 }
 
 var file_items_items_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_items_items_proto_msgTypes = make([]protoimpl.MessageInfo, 55)
+var file_items_items_proto_msgTypes = make([]protoimpl.MessageInfo, 57)
 var file_items_items_proto_goTypes = []interface{}{
 	(Item_State)(0),                                // 0: content.items.Item.State
 	(*Error)(nil),                                  // 1: content.items.Error
@@ -3921,148 +3998,154 @@ var file_items_items_proto_goTypes = []interface{}{
 	(*UpdateOptions)(nil),                          // 15: content.items.UpdateOptions
 	(*GetPublishedOptions)(nil),                    // 16: content.items.GetPublishedOptions
 	(*DeleteOptions)(nil),                          // 17: content.items.DeleteOptions
-	(*PublishOptions)(nil),                         // 18: content.items.PublishOptions
-	(*FindPublishedOptions)(nil),                   // 19: content.items.FindPublishedOptions
-	(*FindArchivedOptions)(nil),                    // 20: content.items.FindArchivedOptions
-	(*ListRevisionsOptions)(nil),                   // 21: content.items.ListRevisionsOptions
-	(*AggregateOptions)(nil),                       // 22: content.items.AggregateOptions
-	(*AggregatePublishedOptions)(nil),              // 23: content.items.AggregatePublishedOptions
-	(*CreateRequest)(nil),                          // 24: content.items.CreateRequest
-	(*CreateResponse)(nil),                         // 25: content.items.CreateResponse
-	(*IntrospectRequest)(nil),                      // 26: content.items.IntrospectRequest
-	(*IntrospectResponse)(nil),                     // 27: content.items.IntrospectResponse
-	(*GetRequest)(nil),                             // 28: content.items.GetRequest
-	(*GetResponse)(nil),                            // 29: content.items.GetResponse
-	(*FindRequest)(nil),                            // 30: content.items.FindRequest
-	(*FindResponse)(nil),                           // 31: content.items.FindResponse
-	(*UpdateRequest)(nil),                          // 32: content.items.UpdateRequest
-	(*DeleteRequest)(nil),                          // 33: content.items.DeleteRequest
-	(*UndeleteRequest)(nil),                        // 34: content.items.UndeleteRequest
-	(*PublishRequest)(nil),                         // 35: content.items.PublishRequest
-	(*UnpublishRequest)(nil),                       // 36: content.items.UnpublishRequest
-	(*GetPublishedRequest)(nil),                    // 37: content.items.GetPublishedRequest
-	(*GetPublishedResponse)(nil),                   // 38: content.items.GetPublishedResponse
-	(*FindPublishedRequest)(nil),                   // 39: content.items.FindPublishedRequest
-	(*FindPublishedResponse)(nil),                  // 40: content.items.FindPublishedResponse
-	(*AggregateRequest)(nil),                       // 41: content.items.AggregateRequest
-	(*AggregateResponse)(nil),                      // 42: content.items.AggregateResponse
-	(*AggregatePublishedRequest)(nil),              // 43: content.items.AggregatePublishedRequest
-	(*AggregatePublishedResponse)(nil),             // 44: content.items.AggregatePublishedResponse
-	(*GetRevisionRequest)(nil),                     // 45: content.items.GetRevisionRequest
-	(*GetRevisionResponse)(nil),                    // 46: content.items.GetRevisionResponse
-	(*ListRevisionsRequest)(nil),                   // 47: content.items.ListRevisionsRequest
-	(*ListRevisionsResponse)(nil),                  // 48: content.items.ListRevisionsResponse
-	(*ArchiveRequest)(nil),                         // 49: content.items.ArchiveRequest
-	(*UnarchiveRequest)(nil),                       // 50: content.items.UnarchiveRequest
-	(*FindArchivedRequest)(nil),                    // 51: content.items.FindArchivedRequest
-	(*FindArchivedResponse)(nil),                   // 52: content.items.FindArchivedResponse
-	nil,                                            // 53: content.items.Item.TranslationsEntry
-	nil,                                            // 54: content.items.AggregateOptions.FieldsEntry
-	nil,                                            // 55: content.items.AggregatePublishedOptions.FieldsEntry
-	(*timestamppb.Timestamp)(nil),                  // 56: google.protobuf.Timestamp
-	(*structpb.Struct)(nil),                        // 57: google.protobuf.Struct
-	(*common.Filter)(nil),                          // 58: common.Filter
-	(*common.FindOptions)(nil),                     // 59: common.FindOptions
-	(*common.Error_BadRequest_FieldViolation)(nil), // 60: common.Error.BadRequest.FieldViolation
-	(*emptypb.Empty)(nil),                          // 61: google.protobuf.Empty
+	(*UndeleteOptions)(nil),                        // 18: content.items.UndeleteOptions
+	(*PublishOptions)(nil),                         // 19: content.items.PublishOptions
+	(*UnpublishOptions)(nil),                       // 20: content.items.UnpublishOptions
+	(*FindPublishedOptions)(nil),                   // 21: content.items.FindPublishedOptions
+	(*FindArchivedOptions)(nil),                    // 22: content.items.FindArchivedOptions
+	(*ListRevisionsOptions)(nil),                   // 23: content.items.ListRevisionsOptions
+	(*AggregateOptions)(nil),                       // 24: content.items.AggregateOptions
+	(*AggregatePublishedOptions)(nil),              // 25: content.items.AggregatePublishedOptions
+	(*CreateRequest)(nil),                          // 26: content.items.CreateRequest
+	(*CreateResponse)(nil),                         // 27: content.items.CreateResponse
+	(*IntrospectRequest)(nil),                      // 28: content.items.IntrospectRequest
+	(*IntrospectResponse)(nil),                     // 29: content.items.IntrospectResponse
+	(*GetRequest)(nil),                             // 30: content.items.GetRequest
+	(*GetResponse)(nil),                            // 31: content.items.GetResponse
+	(*FindRequest)(nil),                            // 32: content.items.FindRequest
+	(*FindResponse)(nil),                           // 33: content.items.FindResponse
+	(*UpdateRequest)(nil),                          // 34: content.items.UpdateRequest
+	(*DeleteRequest)(nil),                          // 35: content.items.DeleteRequest
+	(*UndeleteRequest)(nil),                        // 36: content.items.UndeleteRequest
+	(*PublishRequest)(nil),                         // 37: content.items.PublishRequest
+	(*UnpublishRequest)(nil),                       // 38: content.items.UnpublishRequest
+	(*GetPublishedRequest)(nil),                    // 39: content.items.GetPublishedRequest
+	(*GetPublishedResponse)(nil),                   // 40: content.items.GetPublishedResponse
+	(*FindPublishedRequest)(nil),                   // 41: content.items.FindPublishedRequest
+	(*FindPublishedResponse)(nil),                  // 42: content.items.FindPublishedResponse
+	(*AggregateRequest)(nil),                       // 43: content.items.AggregateRequest
+	(*AggregateResponse)(nil),                      // 44: content.items.AggregateResponse
+	(*AggregatePublishedRequest)(nil),              // 45: content.items.AggregatePublishedRequest
+	(*AggregatePublishedResponse)(nil),             // 46: content.items.AggregatePublishedResponse
+	(*GetRevisionRequest)(nil),                     // 47: content.items.GetRevisionRequest
+	(*GetRevisionResponse)(nil),                    // 48: content.items.GetRevisionResponse
+	(*ListRevisionsRequest)(nil),                   // 49: content.items.ListRevisionsRequest
+	(*ListRevisionsResponse)(nil),                  // 50: content.items.ListRevisionsResponse
+	(*ArchiveRequest)(nil),                         // 51: content.items.ArchiveRequest
+	(*UnarchiveRequest)(nil),                       // 52: content.items.UnarchiveRequest
+	(*FindArchivedRequest)(nil),                    // 53: content.items.FindArchivedRequest
+	(*FindArchivedResponse)(nil),                   // 54: content.items.FindArchivedResponse
+	nil,                                            // 55: content.items.Item.TranslationsEntry
+	nil,                                            // 56: content.items.AggregateOptions.FieldsEntry
+	nil,                                            // 57: content.items.AggregatePublishedOptions.FieldsEntry
+	(*timestamppb.Timestamp)(nil),                  // 58: google.protobuf.Timestamp
+	(*structpb.Struct)(nil),                        // 59: google.protobuf.Struct
+	(*common.Filter)(nil),                          // 60: common.Filter
+	(*common.FindOptions)(nil),                     // 61: common.FindOptions
+	(*common.Error_BadRequest_FieldViolation)(nil), // 62: common.Error.BadRequest.FieldViolation
+	(*emptypb.Empty)(nil),                          // 63: google.protobuf.Empty
 }
 var file_items_items_proto_depIdxs = []int32{
 	1,  // 0: content.items.DecodeError.errors:type_name -> content.items.Error
 	1,  // 1: content.items.ValidationError.errors:type_name -> content.items.Error
 	1,  // 2: content.items.ModificationError.errors:type_name -> content.items.Error
 	0,  // 3: content.items.Item.state:type_name -> content.items.Item.State
-	56, // 4: content.items.Item.created_rev_at:type_name -> google.protobuf.Timestamp
-	56, // 5: content.items.Item.created_at:type_name -> google.protobuf.Timestamp
-	56, // 6: content.items.Item.updated_at:type_name -> google.protobuf.Timestamp
-	57, // 7: content.items.Item.data:type_name -> google.protobuf.Struct
-	53, // 8: content.items.Item.translations:type_name -> content.items.Item.TranslationsEntry
-	56, // 9: content.items.Item.published_at:type_name -> google.protobuf.Timestamp
-	56, // 10: content.items.Item.archived_at:type_name -> google.protobuf.Timestamp
+	58, // 4: content.items.Item.created_rev_at:type_name -> google.protobuf.Timestamp
+	58, // 5: content.items.Item.created_at:type_name -> google.protobuf.Timestamp
+	58, // 6: content.items.Item.updated_at:type_name -> google.protobuf.Timestamp
+	59, // 7: content.items.Item.data:type_name -> google.protobuf.Struct
+	55, // 8: content.items.Item.translations:type_name -> content.items.Item.TranslationsEntry
+	58, // 9: content.items.Item.published_at:type_name -> google.protobuf.Timestamp
+	58, // 10: content.items.Item.archived_at:type_name -> google.protobuf.Timestamp
 	5,  // 11: content.items.Item.permissions:type_name -> content.items.Permissions
-	58, // 12: content.items.Filter.data:type_name -> common.Filter
-	59, // 13: content.items.FindOptions.options:type_name -> common.FindOptions
-	59, // 14: content.items.FindPublishedOptions.options:type_name -> common.FindOptions
-	59, // 15: content.items.FindArchivedOptions.options:type_name -> common.FindOptions
-	59, // 16: content.items.ListRevisionsOptions.options:type_name -> common.FindOptions
-	54, // 17: content.items.AggregateOptions.fields:type_name -> content.items.AggregateOptions.FieldsEntry
-	55, // 18: content.items.AggregatePublishedOptions.fields:type_name -> content.items.AggregatePublishedOptions.FieldsEntry
+	60, // 12: content.items.Filter.data:type_name -> common.Filter
+	61, // 13: content.items.FindOptions.options:type_name -> common.FindOptions
+	61, // 14: content.items.FindPublishedOptions.options:type_name -> common.FindOptions
+	61, // 15: content.items.FindArchivedOptions.options:type_name -> common.FindOptions
+	61, // 16: content.items.ListRevisionsOptions.options:type_name -> common.FindOptions
+	56, // 17: content.items.AggregateOptions.fields:type_name -> content.items.AggregateOptions.FieldsEntry
+	57, // 18: content.items.AggregatePublishedOptions.fields:type_name -> content.items.AggregatePublishedOptions.FieldsEntry
 	6,  // 19: content.items.CreateRequest.item:type_name -> content.items.Item
 	13, // 20: content.items.CreateRequest.options:type_name -> content.items.CreateOptions
 	6,  // 21: content.items.CreateResponse.created:type_name -> content.items.Item
 	6,  // 22: content.items.IntrospectRequest.item:type_name -> content.items.Item
 	6,  // 23: content.items.IntrospectResponse.item:type_name -> content.items.Item
-	60, // 24: content.items.IntrospectResponse.validation_errors:type_name -> common.Error.BadRequest.FieldViolation
+	62, // 24: content.items.IntrospectResponse.validation_errors:type_name -> common.Error.BadRequest.FieldViolation
 	6,  // 25: content.items.GetResponse.item:type_name -> content.items.Item
 	12, // 26: content.items.FindRequest.filter:type_name -> content.items.Filter
 	14, // 27: content.items.FindRequest.options:type_name -> content.items.FindOptions
 	6,  // 28: content.items.FindResponse.items:type_name -> content.items.Item
 	6,  // 29: content.items.UpdateRequest.item:type_name -> content.items.Item
 	15, // 30: content.items.UpdateRequest.options:type_name -> content.items.UpdateOptions
-	17, // 31: content.items.DeleteRequest.options:type_name -> content.items.DeleteOptions
-	6,  // 32: content.items.PublishRequest.item:type_name -> content.items.Item
-	18, // 33: content.items.PublishRequest.options:type_name -> content.items.PublishOptions
-	6,  // 34: content.items.UnpublishRequest.item:type_name -> content.items.Item
-	16, // 35: content.items.GetPublishedRequest.options:type_name -> content.items.GetPublishedOptions
-	6,  // 36: content.items.GetPublishedResponse.item:type_name -> content.items.Item
-	12, // 37: content.items.FindPublishedRequest.filter:type_name -> content.items.Filter
-	19, // 38: content.items.FindPublishedRequest.options:type_name -> content.items.FindPublishedOptions
-	6,  // 39: content.items.FindPublishedResponse.items:type_name -> content.items.Item
-	12, // 40: content.items.AggregateRequest.filter:type_name -> content.items.Filter
-	22, // 41: content.items.AggregateRequest.options:type_name -> content.items.AggregateOptions
-	57, // 42: content.items.AggregateResponse.result:type_name -> google.protobuf.Struct
-	12, // 43: content.items.AggregatePublishedRequest.filter:type_name -> content.items.Filter
-	23, // 44: content.items.AggregatePublishedRequest.options:type_name -> content.items.AggregatePublishedOptions
-	57, // 45: content.items.AggregatePublishedResponse.result:type_name -> google.protobuf.Struct
-	6,  // 46: content.items.GetRevisionResponse.item:type_name -> content.items.Item
-	21, // 47: content.items.ListRevisionsRequest.options:type_name -> content.items.ListRevisionsOptions
-	6,  // 48: content.items.ListRevisionsResponse.items:type_name -> content.items.Item
-	6,  // 49: content.items.ArchiveRequest.item:type_name -> content.items.Item
-	6,  // 50: content.items.UnarchiveRequest.item:type_name -> content.items.Item
-	12, // 51: content.items.FindArchivedRequest.filter:type_name -> content.items.Filter
-	20, // 52: content.items.FindArchivedRequest.options:type_name -> content.items.FindArchivedOptions
-	6,  // 53: content.items.FindArchivedResponse.items:type_name -> content.items.Item
-	57, // 54: content.items.Item.TranslationsEntry.value:type_name -> google.protobuf.Struct
-	24, // 55: content.items.Items.Create:input_type -> content.items.CreateRequest
-	26, // 56: content.items.Items.Introspect:input_type -> content.items.IntrospectRequest
-	28, // 57: content.items.Items.Get:input_type -> content.items.GetRequest
-	30, // 58: content.items.Items.Find:input_type -> content.items.FindRequest
-	32, // 59: content.items.Items.Update:input_type -> content.items.UpdateRequest
-	33, // 60: content.items.Items.Delete:input_type -> content.items.DeleteRequest
-	34, // 61: content.items.Items.Undelete:input_type -> content.items.UndeleteRequest
-	35, // 62: content.items.Items.Publish:input_type -> content.items.PublishRequest
-	36, // 63: content.items.Items.Unpublish:input_type -> content.items.UnpublishRequest
-	37, // 64: content.items.Items.GetPublished:input_type -> content.items.GetPublishedRequest
-	39, // 65: content.items.Items.FindPublished:input_type -> content.items.FindPublishedRequest
-	41, // 66: content.items.Items.Aggregate:input_type -> content.items.AggregateRequest
-	43, // 67: content.items.Items.AggregatePublished:input_type -> content.items.AggregatePublishedRequest
-	45, // 68: content.items.Items.GetRevision:input_type -> content.items.GetRevisionRequest
-	47, // 69: content.items.Items.ListRevisions:input_type -> content.items.ListRevisionsRequest
-	49, // 70: content.items.Items.Archive:input_type -> content.items.ArchiveRequest
-	51, // 71: content.items.Items.FindArchived:input_type -> content.items.FindArchivedRequest
-	50, // 72: content.items.Items.Unarchive:input_type -> content.items.UnarchiveRequest
-	25, // 73: content.items.Items.Create:output_type -> content.items.CreateResponse
-	27, // 74: content.items.Items.Introspect:output_type -> content.items.IntrospectResponse
-	29, // 75: content.items.Items.Get:output_type -> content.items.GetResponse
-	31, // 76: content.items.Items.Find:output_type -> content.items.FindResponse
-	61, // 77: content.items.Items.Update:output_type -> google.protobuf.Empty
-	61, // 78: content.items.Items.Delete:output_type -> google.protobuf.Empty
-	61, // 79: content.items.Items.Undelete:output_type -> google.protobuf.Empty
-	61, // 80: content.items.Items.Publish:output_type -> google.protobuf.Empty
-	61, // 81: content.items.Items.Unpublish:output_type -> google.protobuf.Empty
-	38, // 82: content.items.Items.GetPublished:output_type -> content.items.GetPublishedResponse
-	40, // 83: content.items.Items.FindPublished:output_type -> content.items.FindPublishedResponse
-	42, // 84: content.items.Items.Aggregate:output_type -> content.items.AggregateResponse
-	44, // 85: content.items.Items.AggregatePublished:output_type -> content.items.AggregatePublishedResponse
-	46, // 86: content.items.Items.GetRevision:output_type -> content.items.GetRevisionResponse
-	48, // 87: content.items.Items.ListRevisions:output_type -> content.items.ListRevisionsResponse
-	61, // 88: content.items.Items.Archive:output_type -> google.protobuf.Empty
-	52, // 89: content.items.Items.FindArchived:output_type -> content.items.FindArchivedResponse
-	61, // 90: content.items.Items.Unarchive:output_type -> google.protobuf.Empty
-	73, // [73:91] is the sub-list for method output_type
-	55, // [55:73] is the sub-list for method input_type
-	55, // [55:55] is the sub-list for extension type_name
-	55, // [55:55] is the sub-list for extension extendee
-	0,  // [0:55] is the sub-list for field type_name
+	6,  // 31: content.items.DeleteRequest.item:type_name -> content.items.Item
+	17, // 32: content.items.DeleteRequest.options:type_name -> content.items.DeleteOptions
+	6,  // 33: content.items.UndeleteRequest.item:type_name -> content.items.Item
+	18, // 34: content.items.UndeleteRequest.options:type_name -> content.items.UndeleteOptions
+	6,  // 35: content.items.PublishRequest.item:type_name -> content.items.Item
+	19, // 36: content.items.PublishRequest.options:type_name -> content.items.PublishOptions
+	6,  // 37: content.items.UnpublishRequest.item:type_name -> content.items.Item
+	20, // 38: content.items.UnpublishRequest.options:type_name -> content.items.UnpublishOptions
+	16, // 39: content.items.GetPublishedRequest.options:type_name -> content.items.GetPublishedOptions
+	6,  // 40: content.items.GetPublishedResponse.item:type_name -> content.items.Item
+	12, // 41: content.items.FindPublishedRequest.filter:type_name -> content.items.Filter
+	21, // 42: content.items.FindPublishedRequest.options:type_name -> content.items.FindPublishedOptions
+	6,  // 43: content.items.FindPublishedResponse.items:type_name -> content.items.Item
+	12, // 44: content.items.AggregateRequest.filter:type_name -> content.items.Filter
+	24, // 45: content.items.AggregateRequest.options:type_name -> content.items.AggregateOptions
+	59, // 46: content.items.AggregateResponse.result:type_name -> google.protobuf.Struct
+	12, // 47: content.items.AggregatePublishedRequest.filter:type_name -> content.items.Filter
+	25, // 48: content.items.AggregatePublishedRequest.options:type_name -> content.items.AggregatePublishedOptions
+	59, // 49: content.items.AggregatePublishedResponse.result:type_name -> google.protobuf.Struct
+	6,  // 50: content.items.GetRevisionResponse.item:type_name -> content.items.Item
+	23, // 51: content.items.ListRevisionsRequest.options:type_name -> content.items.ListRevisionsOptions
+	6,  // 52: content.items.ListRevisionsResponse.items:type_name -> content.items.Item
+	6,  // 53: content.items.ArchiveRequest.item:type_name -> content.items.Item
+	6,  // 54: content.items.UnarchiveRequest.item:type_name -> content.items.Item
+	12, // 55: content.items.FindArchivedRequest.filter:type_name -> content.items.Filter
+	22, // 56: content.items.FindArchivedRequest.options:type_name -> content.items.FindArchivedOptions
+	6,  // 57: content.items.FindArchivedResponse.items:type_name -> content.items.Item
+	59, // 58: content.items.Item.TranslationsEntry.value:type_name -> google.protobuf.Struct
+	26, // 59: content.items.Items.Create:input_type -> content.items.CreateRequest
+	28, // 60: content.items.Items.Introspect:input_type -> content.items.IntrospectRequest
+	30, // 61: content.items.Items.Get:input_type -> content.items.GetRequest
+	32, // 62: content.items.Items.Find:input_type -> content.items.FindRequest
+	34, // 63: content.items.Items.Update:input_type -> content.items.UpdateRequest
+	35, // 64: content.items.Items.Delete:input_type -> content.items.DeleteRequest
+	36, // 65: content.items.Items.Undelete:input_type -> content.items.UndeleteRequest
+	37, // 66: content.items.Items.Publish:input_type -> content.items.PublishRequest
+	38, // 67: content.items.Items.Unpublish:input_type -> content.items.UnpublishRequest
+	39, // 68: content.items.Items.GetPublished:input_type -> content.items.GetPublishedRequest
+	41, // 69: content.items.Items.FindPublished:input_type -> content.items.FindPublishedRequest
+	43, // 70: content.items.Items.Aggregate:input_type -> content.items.AggregateRequest
+	45, // 71: content.items.Items.AggregatePublished:input_type -> content.items.AggregatePublishedRequest
+	47, // 72: content.items.Items.GetRevision:input_type -> content.items.GetRevisionRequest
+	49, // 73: content.items.Items.ListRevisions:input_type -> content.items.ListRevisionsRequest
+	51, // 74: content.items.Items.Archive:input_type -> content.items.ArchiveRequest
+	53, // 75: content.items.Items.FindArchived:input_type -> content.items.FindArchivedRequest
+	52, // 76: content.items.Items.Unarchive:input_type -> content.items.UnarchiveRequest
+	27, // 77: content.items.Items.Create:output_type -> content.items.CreateResponse
+	29, // 78: content.items.Items.Introspect:output_type -> content.items.IntrospectResponse
+	31, // 79: content.items.Items.Get:output_type -> content.items.GetResponse
+	33, // 80: content.items.Items.Find:output_type -> content.items.FindResponse
+	63, // 81: content.items.Items.Update:output_type -> google.protobuf.Empty
+	63, // 82: content.items.Items.Delete:output_type -> google.protobuf.Empty
+	63, // 83: content.items.Items.Undelete:output_type -> google.protobuf.Empty
+	63, // 84: content.items.Items.Publish:output_type -> google.protobuf.Empty
+	63, // 85: content.items.Items.Unpublish:output_type -> google.protobuf.Empty
+	40, // 86: content.items.Items.GetPublished:output_type -> content.items.GetPublishedResponse
+	42, // 87: content.items.Items.FindPublished:output_type -> content.items.FindPublishedResponse
+	44, // 88: content.items.Items.Aggregate:output_type -> content.items.AggregateResponse
+	46, // 89: content.items.Items.AggregatePublished:output_type -> content.items.AggregatePublishedResponse
+	48, // 90: content.items.Items.GetRevision:output_type -> content.items.GetRevisionResponse
+	50, // 91: content.items.Items.ListRevisions:output_type -> content.items.ListRevisionsResponse
+	63, // 92: content.items.Items.Archive:output_type -> google.protobuf.Empty
+	54, // 93: content.items.Items.FindArchived:output_type -> content.items.FindArchivedResponse
+	63, // 94: content.items.Items.Unarchive:output_type -> google.protobuf.Empty
+	77, // [77:95] is the sub-list for method output_type
+	59, // [59:77] is the sub-list for method input_type
+	59, // [59:59] is the sub-list for extension type_name
+	59, // [59:59] is the sub-list for extension extendee
+	0,  // [0:59] is the sub-list for field type_name
 }
 
 func init() { file_items_items_proto_init() }
@@ -4276,7 +4359,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PublishOptions); i {
+			switch v := v.(*UndeleteOptions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4288,7 +4371,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FindPublishedOptions); i {
+			switch v := v.(*PublishOptions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4300,7 +4383,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FindArchivedOptions); i {
+			switch v := v.(*UnpublishOptions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4312,7 +4395,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListRevisionsOptions); i {
+			switch v := v.(*FindPublishedOptions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4324,7 +4407,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AggregateOptions); i {
+			switch v := v.(*FindArchivedOptions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4336,7 +4419,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AggregatePublishedOptions); i {
+			switch v := v.(*ListRevisionsOptions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4348,7 +4431,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CreateRequest); i {
+			switch v := v.(*AggregateOptions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4360,7 +4443,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CreateResponse); i {
+			switch v := v.(*AggregatePublishedOptions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4372,7 +4455,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IntrospectRequest); i {
+			switch v := v.(*CreateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4384,7 +4467,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IntrospectResponse); i {
+			switch v := v.(*CreateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4396,7 +4479,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetRequest); i {
+			switch v := v.(*IntrospectRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4408,7 +4491,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetResponse); i {
+			switch v := v.(*IntrospectResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4420,7 +4503,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FindRequest); i {
+			switch v := v.(*GetRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4432,7 +4515,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FindResponse); i {
+			switch v := v.(*GetResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4444,7 +4527,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UpdateRequest); i {
+			switch v := v.(*FindRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4456,7 +4539,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeleteRequest); i {
+			switch v := v.(*FindResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4468,7 +4551,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UndeleteRequest); i {
+			switch v := v.(*UpdateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4480,7 +4563,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PublishRequest); i {
+			switch v := v.(*DeleteRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4492,7 +4575,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UnpublishRequest); i {
+			switch v := v.(*UndeleteRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4504,7 +4587,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPublishedRequest); i {
+			switch v := v.(*PublishRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4516,7 +4599,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetPublishedResponse); i {
+			switch v := v.(*UnpublishRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4528,7 +4611,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FindPublishedRequest); i {
+			switch v := v.(*GetPublishedRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4540,7 +4623,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FindPublishedResponse); i {
+			switch v := v.(*GetPublishedResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4552,7 +4635,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AggregateRequest); i {
+			switch v := v.(*FindPublishedRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4564,7 +4647,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AggregateResponse); i {
+			switch v := v.(*FindPublishedResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4576,7 +4659,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AggregatePublishedRequest); i {
+			switch v := v.(*AggregateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4588,7 +4671,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AggregatePublishedResponse); i {
+			switch v := v.(*AggregateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4600,7 +4683,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetRevisionRequest); i {
+			switch v := v.(*AggregatePublishedRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4612,7 +4695,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetRevisionResponse); i {
+			switch v := v.(*AggregatePublishedResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4624,7 +4707,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListRevisionsRequest); i {
+			switch v := v.(*GetRevisionRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4636,7 +4719,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ListRevisionsResponse); i {
+			switch v := v.(*GetRevisionResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4648,7 +4731,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ArchiveRequest); i {
+			switch v := v.(*ListRevisionsRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4660,7 +4743,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UnarchiveRequest); i {
+			switch v := v.(*ListRevisionsResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4672,7 +4755,7 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FindArchivedRequest); i {
+			switch v := v.(*ArchiveRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4684,6 +4767,30 @@ func file_items_items_proto_init() {
 			}
 		}
 		file_items_items_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*UnarchiveRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_items_items_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FindArchivedRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_items_items_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*FindArchivedResponse); i {
 			case 0:
 				return &v.state
@@ -4702,7 +4809,7 @@ func file_items_items_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_items_items_proto_rawDesc,
 			NumEnums:      1,
-			NumMessages:   55,
+			NumMessages:   57,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/proto/items/items_grpc.pb.go b/proto/items/items_grpc.pb.go
index 7c7d321a9b1a57290a874dc8723679e9b6e755f2..08f6c91b7015e34ac5c765bc0f41496f801fb32c 100644
--- a/proto/items/items_grpc.pb.go
+++ b/proto/items/items_grpc.pb.go
@@ -1,11 +1,3 @@
-//*
-// # Items
-//
-// API Сервиса работы с пользовательским записями (Items)
-//
-// Предоставляет доступ к записям пользовательских коллекций
-//
-
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
 // - protoc-gen-go-grpc v1.3.0
@@ -27,41 +19,20 @@ import (
 // Requires gRPC-Go v1.32.0 or later.
 const _ = grpc.SupportPackageIsVersion7
 
-const (
-	Items_Create_FullMethodName             = "/content.items.Items/Create"
-	Items_Introspect_FullMethodName         = "/content.items.Items/Introspect"
-	Items_Get_FullMethodName                = "/content.items.Items/Get"
-	Items_Find_FullMethodName               = "/content.items.Items/Find"
-	Items_Update_FullMethodName             = "/content.items.Items/Update"
-	Items_Delete_FullMethodName             = "/content.items.Items/Delete"
-	Items_Undelete_FullMethodName           = "/content.items.Items/Undelete"
-	Items_Publish_FullMethodName            = "/content.items.Items/Publish"
-	Items_Unpublish_FullMethodName          = "/content.items.Items/Unpublish"
-	Items_GetPublished_FullMethodName       = "/content.items.Items/GetPublished"
-	Items_FindPublished_FullMethodName      = "/content.items.Items/FindPublished"
-	Items_Aggregate_FullMethodName          = "/content.items.Items/Aggregate"
-	Items_AggregatePublished_FullMethodName = "/content.items.Items/AggregatePublished"
-	Items_GetRevision_FullMethodName        = "/content.items.Items/GetRevision"
-	Items_ListRevisions_FullMethodName      = "/content.items.Items/ListRevisions"
-	Items_Archive_FullMethodName            = "/content.items.Items/Archive"
-	Items_FindArchived_FullMethodName       = "/content.items.Items/FindArchived"
-	Items_Unarchive_FullMethodName          = "/content.items.Items/Unarchive"
-)
-
 // ItemsClient is the client API for Items service.
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 type ItemsClient interface {
-	// *
+	//*
 	// Создать запись
 	Create(ctx context.Context, in *CreateRequest, opts ...grpc.CallOption) (*CreateResponse, error)
-	// *
+	//*
 	// Валидация данных записи
 	Introspect(ctx context.Context, in *IntrospectRequest, opts ...grpc.CallOption) (*IntrospectResponse, error)
-	// *
+	//*
 	// Получение записи по идентификатору
 	Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error)
-	// *
+	//*
 	// Поиск по текущим записям
 	Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (*FindResponse, error)
 	Update(ctx context.Context, in *UpdateRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
@@ -71,10 +42,10 @@ type ItemsClient interface {
 	Unpublish(ctx context.Context, in *UnpublishRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
 	GetPublished(ctx context.Context, in *GetPublishedRequest, opts ...grpc.CallOption) (*GetPublishedResponse, error)
 	FindPublished(ctx context.Context, in *FindPublishedRequest, opts ...grpc.CallOption) (*FindPublishedResponse, error)
-	// *
+	//*
 	// Расчет значений по существующим данным. Например, получение среднего значения поля
 	Aggregate(ctx context.Context, in *AggregateRequest, opts ...grpc.CallOption) (*AggregateResponse, error)
-	// *
+	//*
 	// Расчет значений по существующим **опубликованным** данным.
 	AggregatePublished(ctx context.Context, in *AggregatePublishedRequest, opts ...grpc.CallOption) (*AggregatePublishedResponse, error)
 	GetRevision(ctx context.Context, in *GetRevisionRequest, opts ...grpc.CallOption) (*GetRevisionResponse, error)
@@ -94,7 +65,7 @@ func NewItemsClient(cc grpc.ClientConnInterface) ItemsClient {
 
 func (c *itemsClient) Create(ctx context.Context, in *CreateRequest, opts ...grpc.CallOption) (*CreateResponse, error) {
 	out := new(CreateResponse)
-	err := c.cc.Invoke(ctx, Items_Create_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Create", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -103,7 +74,7 @@ func (c *itemsClient) Create(ctx context.Context, in *CreateRequest, opts ...grp
 
 func (c *itemsClient) Introspect(ctx context.Context, in *IntrospectRequest, opts ...grpc.CallOption) (*IntrospectResponse, error) {
 	out := new(IntrospectResponse)
-	err := c.cc.Invoke(ctx, Items_Introspect_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Introspect", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -112,7 +83,7 @@ func (c *itemsClient) Introspect(ctx context.Context, in *IntrospectRequest, opt
 
 func (c *itemsClient) Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error) {
 	out := new(GetResponse)
-	err := c.cc.Invoke(ctx, Items_Get_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Get", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -121,7 +92,7 @@ func (c *itemsClient) Get(ctx context.Context, in *GetRequest, opts ...grpc.Call
 
 func (c *itemsClient) Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (*FindResponse, error) {
 	out := new(FindResponse)
-	err := c.cc.Invoke(ctx, Items_Find_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Find", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -130,7 +101,7 @@ func (c *itemsClient) Find(ctx context.Context, in *FindRequest, opts ...grpc.Ca
 
 func (c *itemsClient) Update(ctx context.Context, in *UpdateRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
 	out := new(emptypb.Empty)
-	err := c.cc.Invoke(ctx, Items_Update_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Update", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -139,7 +110,7 @@ func (c *itemsClient) Update(ctx context.Context, in *UpdateRequest, opts ...grp
 
 func (c *itemsClient) Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
 	out := new(emptypb.Empty)
-	err := c.cc.Invoke(ctx, Items_Delete_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Delete", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -148,7 +119,7 @@ func (c *itemsClient) Delete(ctx context.Context, in *DeleteRequest, opts ...grp
 
 func (c *itemsClient) Undelete(ctx context.Context, in *UndeleteRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
 	out := new(emptypb.Empty)
-	err := c.cc.Invoke(ctx, Items_Undelete_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Undelete", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -157,7 +128,7 @@ func (c *itemsClient) Undelete(ctx context.Context, in *UndeleteRequest, opts ..
 
 func (c *itemsClient) Publish(ctx context.Context, in *PublishRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
 	out := new(emptypb.Empty)
-	err := c.cc.Invoke(ctx, Items_Publish_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Publish", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -166,7 +137,7 @@ func (c *itemsClient) Publish(ctx context.Context, in *PublishRequest, opts ...g
 
 func (c *itemsClient) Unpublish(ctx context.Context, in *UnpublishRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
 	out := new(emptypb.Empty)
-	err := c.cc.Invoke(ctx, Items_Unpublish_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Unpublish", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -175,7 +146,7 @@ func (c *itemsClient) Unpublish(ctx context.Context, in *UnpublishRequest, opts
 
 func (c *itemsClient) GetPublished(ctx context.Context, in *GetPublishedRequest, opts ...grpc.CallOption) (*GetPublishedResponse, error) {
 	out := new(GetPublishedResponse)
-	err := c.cc.Invoke(ctx, Items_GetPublished_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/GetPublished", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -184,7 +155,7 @@ func (c *itemsClient) GetPublished(ctx context.Context, in *GetPublishedRequest,
 
 func (c *itemsClient) FindPublished(ctx context.Context, in *FindPublishedRequest, opts ...grpc.CallOption) (*FindPublishedResponse, error) {
 	out := new(FindPublishedResponse)
-	err := c.cc.Invoke(ctx, Items_FindPublished_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/FindPublished", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -193,7 +164,7 @@ func (c *itemsClient) FindPublished(ctx context.Context, in *FindPublishedReques
 
 func (c *itemsClient) Aggregate(ctx context.Context, in *AggregateRequest, opts ...grpc.CallOption) (*AggregateResponse, error) {
 	out := new(AggregateResponse)
-	err := c.cc.Invoke(ctx, Items_Aggregate_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Aggregate", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -202,7 +173,7 @@ func (c *itemsClient) Aggregate(ctx context.Context, in *AggregateRequest, opts
 
 func (c *itemsClient) AggregatePublished(ctx context.Context, in *AggregatePublishedRequest, opts ...grpc.CallOption) (*AggregatePublishedResponse, error) {
 	out := new(AggregatePublishedResponse)
-	err := c.cc.Invoke(ctx, Items_AggregatePublished_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/AggregatePublished", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -211,7 +182,7 @@ func (c *itemsClient) AggregatePublished(ctx context.Context, in *AggregatePubli
 
 func (c *itemsClient) GetRevision(ctx context.Context, in *GetRevisionRequest, opts ...grpc.CallOption) (*GetRevisionResponse, error) {
 	out := new(GetRevisionResponse)
-	err := c.cc.Invoke(ctx, Items_GetRevision_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/GetRevision", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -220,7 +191,7 @@ func (c *itemsClient) GetRevision(ctx context.Context, in *GetRevisionRequest, o
 
 func (c *itemsClient) ListRevisions(ctx context.Context, in *ListRevisionsRequest, opts ...grpc.CallOption) (*ListRevisionsResponse, error) {
 	out := new(ListRevisionsResponse)
-	err := c.cc.Invoke(ctx, Items_ListRevisions_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/ListRevisions", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -229,7 +200,7 @@ func (c *itemsClient) ListRevisions(ctx context.Context, in *ListRevisionsReques
 
 func (c *itemsClient) Archive(ctx context.Context, in *ArchiveRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
 	out := new(emptypb.Empty)
-	err := c.cc.Invoke(ctx, Items_Archive_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Archive", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -238,7 +209,7 @@ func (c *itemsClient) Archive(ctx context.Context, in *ArchiveRequest, opts ...g
 
 func (c *itemsClient) FindArchived(ctx context.Context, in *FindArchivedRequest, opts ...grpc.CallOption) (*FindArchivedResponse, error) {
 	out := new(FindArchivedResponse)
-	err := c.cc.Invoke(ctx, Items_FindArchived_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/FindArchived", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -247,7 +218,7 @@ func (c *itemsClient) FindArchived(ctx context.Context, in *FindArchivedRequest,
 
 func (c *itemsClient) Unarchive(ctx context.Context, in *UnarchiveRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
 	out := new(emptypb.Empty)
-	err := c.cc.Invoke(ctx, Items_Unarchive_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/content.items.Items/Unarchive", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -258,16 +229,16 @@ func (c *itemsClient) Unarchive(ctx context.Context, in *UnarchiveRequest, opts
 // All implementations must embed UnimplementedItemsServer
 // for forward compatibility
 type ItemsServer interface {
-	// *
+	//*
 	// Создать запись
 	Create(context.Context, *CreateRequest) (*CreateResponse, error)
-	// *
+	//*
 	// Валидация данных записи
 	Introspect(context.Context, *IntrospectRequest) (*IntrospectResponse, error)
-	// *
+	//*
 	// Получение записи по идентификатору
 	Get(context.Context, *GetRequest) (*GetResponse, error)
-	// *
+	//*
 	// Поиск по текущим записям
 	Find(context.Context, *FindRequest) (*FindResponse, error)
 	Update(context.Context, *UpdateRequest) (*emptypb.Empty, error)
@@ -277,10 +248,10 @@ type ItemsServer interface {
 	Unpublish(context.Context, *UnpublishRequest) (*emptypb.Empty, error)
 	GetPublished(context.Context, *GetPublishedRequest) (*GetPublishedResponse, error)
 	FindPublished(context.Context, *FindPublishedRequest) (*FindPublishedResponse, error)
-	// *
+	//*
 	// Расчет значений по существующим данным. Например, получение среднего значения поля
 	Aggregate(context.Context, *AggregateRequest) (*AggregateResponse, error)
-	// *
+	//*
 	// Расчет значений по существующим **опубликованным** данным.
 	AggregatePublished(context.Context, *AggregatePublishedRequest) (*AggregatePublishedResponse, error)
 	GetRevision(context.Context, *GetRevisionRequest) (*GetRevisionResponse, error)
@@ -372,7 +343,7 @@ func _Items_Create_Handler(srv interface{}, ctx context.Context, dec func(interf
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Create_FullMethodName,
+		FullMethod: "/content.items.Items/Create",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Create(ctx, req.(*CreateRequest))
@@ -390,7 +361,7 @@ func _Items_Introspect_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Introspect_FullMethodName,
+		FullMethod: "/content.items.Items/Introspect",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Introspect(ctx, req.(*IntrospectRequest))
@@ -408,7 +379,7 @@ func _Items_Get_Handler(srv interface{}, ctx context.Context, dec func(interface
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Get_FullMethodName,
+		FullMethod: "/content.items.Items/Get",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Get(ctx, req.(*GetRequest))
@@ -426,7 +397,7 @@ func _Items_Find_Handler(srv interface{}, ctx context.Context, dec func(interfac
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Find_FullMethodName,
+		FullMethod: "/content.items.Items/Find",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Find(ctx, req.(*FindRequest))
@@ -444,7 +415,7 @@ func _Items_Update_Handler(srv interface{}, ctx context.Context, dec func(interf
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Update_FullMethodName,
+		FullMethod: "/content.items.Items/Update",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Update(ctx, req.(*UpdateRequest))
@@ -462,7 +433,7 @@ func _Items_Delete_Handler(srv interface{}, ctx context.Context, dec func(interf
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Delete_FullMethodName,
+		FullMethod: "/content.items.Items/Delete",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Delete(ctx, req.(*DeleteRequest))
@@ -480,7 +451,7 @@ func _Items_Undelete_Handler(srv interface{}, ctx context.Context, dec func(inte
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Undelete_FullMethodName,
+		FullMethod: "/content.items.Items/Undelete",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Undelete(ctx, req.(*UndeleteRequest))
@@ -498,7 +469,7 @@ func _Items_Publish_Handler(srv interface{}, ctx context.Context, dec func(inter
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Publish_FullMethodName,
+		FullMethod: "/content.items.Items/Publish",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Publish(ctx, req.(*PublishRequest))
@@ -516,7 +487,7 @@ func _Items_Unpublish_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Unpublish_FullMethodName,
+		FullMethod: "/content.items.Items/Unpublish",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Unpublish(ctx, req.(*UnpublishRequest))
@@ -534,7 +505,7 @@ func _Items_GetPublished_Handler(srv interface{}, ctx context.Context, dec func(
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_GetPublished_FullMethodName,
+		FullMethod: "/content.items.Items/GetPublished",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).GetPublished(ctx, req.(*GetPublishedRequest))
@@ -552,7 +523,7 @@ func _Items_FindPublished_Handler(srv interface{}, ctx context.Context, dec func
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_FindPublished_FullMethodName,
+		FullMethod: "/content.items.Items/FindPublished",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).FindPublished(ctx, req.(*FindPublishedRequest))
@@ -570,7 +541,7 @@ func _Items_Aggregate_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Aggregate_FullMethodName,
+		FullMethod: "/content.items.Items/Aggregate",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Aggregate(ctx, req.(*AggregateRequest))
@@ -588,7 +559,7 @@ func _Items_AggregatePublished_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_AggregatePublished_FullMethodName,
+		FullMethod: "/content.items.Items/AggregatePublished",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).AggregatePublished(ctx, req.(*AggregatePublishedRequest))
@@ -606,7 +577,7 @@ func _Items_GetRevision_Handler(srv interface{}, ctx context.Context, dec func(i
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_GetRevision_FullMethodName,
+		FullMethod: "/content.items.Items/GetRevision",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).GetRevision(ctx, req.(*GetRevisionRequest))
@@ -624,7 +595,7 @@ func _Items_ListRevisions_Handler(srv interface{}, ctx context.Context, dec func
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_ListRevisions_FullMethodName,
+		FullMethod: "/content.items.Items/ListRevisions",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).ListRevisions(ctx, req.(*ListRevisionsRequest))
@@ -642,7 +613,7 @@ func _Items_Archive_Handler(srv interface{}, ctx context.Context, dec func(inter
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Archive_FullMethodName,
+		FullMethod: "/content.items.Items/Archive",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Archive(ctx, req.(*ArchiveRequest))
@@ -660,7 +631,7 @@ func _Items_FindArchived_Handler(srv interface{}, ctx context.Context, dec func(
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_FindArchived_FullMethodName,
+		FullMethod: "/content.items.Items/FindArchived",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).FindArchived(ctx, req.(*FindArchivedRequest))
@@ -678,7 +649,7 @@ func _Items_Unarchive_Handler(srv interface{}, ctx context.Context, dec func(int
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Items_Unarchive_FullMethodName,
+		FullMethod: "/content.items.Items/Unarchive",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(ItemsServer).Unarchive(ctx, req.(*UnarchiveRequest))