From e45a3db8628fcc69968dfb20171845ed65615cdf Mon Sep 17 00:00:00 2001
From: Alex Petraky <petraky@perx.ru>
Date: Wed, 24 Apr 2024 19:44:58 +0000
Subject: [PATCH] =?UTF-8?q?=D0=92=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=82=20GR?=
 =?UTF-8?q?PC-=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=B2=20=D1=81=D0=B5?=
 =?UTF-8?q?=D1=80=D0=B2=D0=B8=D1=81=D0=B0=D1=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../{client.microgen.go => client.go}         |  6 -----
 images/transport/grpc/client.go               | 17 ++++++++++++
 images/transport/grpc/server.go               | 17 ++++++++++++
 pkg/account/client.go                         |  8 +++---
 .../{client.microgen.go => client.go}         |  6 -----
 pkg/account/versions/transport/grpc/client.go | 17 ++++++++++++
 pkg/account/versions/transport/grpc/server.go | 17 ++++++++++++
 .../{client.microgen.go => client.go}         | 24 -----------------
 pkg/clients/transport/grpc/client.go          | 23 ++++++++++++++++
 pkg/clients/transport/grpc/server.go          | 23 ++++++++++++++++
 .../{client.microgen.go => client.go}         | 18 -------------
 pkg/collaborators/transport/grpc/client.go    | 21 +++++++++++++++
 pkg/collaborators/transport/grpc/server.go    | 21 +++++++++++++++
 .../{client.microgen.go => client.go}         | 21 ---------------
 pkg/collections/transport/grpc/client.go      | 22 +++++++++++++++
 pkg/collections/transport/grpc/server.go      | 22 +++++++++++++++
 pkg/content/client.go                         | 14 +++++-----
 .../{client.microgen.go => client.go}         |  6 -----
 pkg/content/versions/transport/grpc/client.go | 17 ++++++++++++
 pkg/content/versions/transport/grpc/server.go | 17 ++++++++++++
 .../{client.microgen.go => client.go}         | 27 -------------------
 pkg/delivery/transport/grpc/client.go         | 23 ++++++++++++++++
 pkg/delivery/transport/grpc/server.go         | 23 ++++++++++++++++
 .../{client.microgen.go => client.go}         | 27 -------------------
 pkg/environments/transport/grpc/client.go     | 24 +++++++++++++++++
 pkg/environments/transport/grpc/server.go     | 24 +++++++++++++++++
 .../{client.microgen.go => client.go}         | 24 -----------------
 pkg/files/transport/grpc/client.go            | 23 ++++++++++++++++
 pkg/files/transport/grpc/server.go            | 23 ++++++++++++++++
 .../{client.microgen.go => client.go}         | 18 -------------
 pkg/invitations/transport/grpc/client.go      | 21 +++++++++++++++
 pkg/invitations/transport/grpc/server.go      | 21 +++++++++++++++
 .../{client.microgen.go => client.go}         | 12 ---------
 pkg/locales/transport/grpc/client.go          | 19 +++++++++++++
 pkg/locales/transport/grpc/server.go          | 19 +++++++++++++
 .../{client.microgen.go => client.go}         |  6 -----
 pkg/members/observer/transport/grpc/client.go | 17 ++++++++++++
 pkg/members/observer/transport/grpc/server.go | 17 ++++++++++++
 .../{client.microgen.go => client.go}         | 18 -------------
 pkg/members/transport/grpc/client.go          | 21 +++++++++++++++
 pkg/members/transport/grpc/server.go          | 21 +++++++++++++++
 .../{client.microgen.go => client.go}         | 18 -------------
 pkg/organizations/transport/grpc/client.go    | 21 +++++++++++++++
 pkg/organizations/transport/grpc/server.go    | 21 +++++++++++++++
 .../{client.microgen.go => client.go}         |  9 -------
 pkg/references/transport/grpc/client.go       | 18 +++++++++++++
 pkg/references/transport/grpc/server.go       | 18 +++++++++++++
 .../{client.microgen.go => client.go}         | 18 -------------
 pkg/roles/transport/grpc/client.go            | 21 +++++++++++++++
 pkg/roles/transport/grpc/server.go            | 21 +++++++++++++++
 .../{client.microgen.go => client.go}         | 21 ---------------
 pkg/users/transport/grpc/client.go            | 22 +++++++++++++++
 pkg/users/transport/grpc/server.go            | 22 +++++++++++++++
 53 files changed, 705 insertions(+), 290 deletions(-)
 rename images/transport/{client.microgen.go => client.go} (68%)
 create mode 100644 images/transport/grpc/client.go
 create mode 100644 images/transport/grpc/server.go
 rename pkg/account/versions/transport/{client.microgen.go => client.go} (62%)
 create mode 100644 pkg/account/versions/transport/grpc/client.go
 create mode 100644 pkg/account/versions/transport/grpc/server.go
 rename pkg/clients/transport/{client.microgen.go => client.go} (66%)
 create mode 100644 pkg/clients/transport/grpc/client.go
 create mode 100644 pkg/clients/transport/grpc/server.go
 rename pkg/collaborators/transport/{client.microgen.go => client.go} (67%)
 create mode 100644 pkg/collaborators/transport/grpc/client.go
 create mode 100644 pkg/collaborators/transport/grpc/server.go
 rename pkg/collections/transport/{client.microgen.go => client.go} (71%)
 create mode 100644 pkg/collections/transport/grpc/client.go
 create mode 100644 pkg/collections/transport/grpc/server.go
 rename pkg/content/versions/transport/{client.microgen.go => client.go} (62%)
 create mode 100644 pkg/content/versions/transport/grpc/client.go
 create mode 100644 pkg/content/versions/transport/grpc/server.go
 rename pkg/delivery/transport/{client.microgen.go => client.go} (74%)
 create mode 100644 pkg/delivery/transport/grpc/client.go
 create mode 100644 pkg/delivery/transport/grpc/server.go
 rename pkg/environments/transport/{client.microgen.go => client.go} (66%)
 create mode 100644 pkg/environments/transport/grpc/client.go
 create mode 100644 pkg/environments/transport/grpc/server.go
 rename pkg/files/transport/{client.microgen.go => client.go} (66%)
 create mode 100644 pkg/files/transport/grpc/client.go
 create mode 100644 pkg/files/transport/grpc/server.go
 rename pkg/invitations/transport/{client.microgen.go => client.go} (67%)
 create mode 100644 pkg/invitations/transport/grpc/client.go
 create mode 100644 pkg/invitations/transport/grpc/server.go
 rename pkg/locales/transport/{client.microgen.go => client.go} (65%)
 create mode 100644 pkg/locales/transport/grpc/client.go
 create mode 100644 pkg/locales/transport/grpc/server.go
 rename pkg/members/observer/transport/{client.microgen.go => client.go} (68%)
 create mode 100644 pkg/members/observer/transport/grpc/client.go
 create mode 100644 pkg/members/observer/transport/grpc/server.go
 rename pkg/members/transport/{client.microgen.go => client.go} (68%)
 create mode 100644 pkg/members/transport/grpc/client.go
 create mode 100644 pkg/members/transport/grpc/server.go
 rename pkg/organizations/transport/{client.microgen.go => client.go} (67%)
 create mode 100644 pkg/organizations/transport/grpc/client.go
 create mode 100644 pkg/organizations/transport/grpc/server.go
 rename pkg/references/transport/{client.microgen.go => client.go} (76%)
 create mode 100644 pkg/references/transport/grpc/client.go
 create mode 100644 pkg/references/transport/grpc/server.go
 rename pkg/roles/transport/{client.microgen.go => client.go} (64%)
 create mode 100644 pkg/roles/transport/grpc/client.go
 create mode 100644 pkg/roles/transport/grpc/server.go
 rename pkg/users/transport/{client.microgen.go => client.go} (66%)
 create mode 100644 pkg/users/transport/grpc/client.go
 create mode 100644 pkg/users/transport/grpc/server.go

diff --git a/images/transport/client.microgen.go b/images/transport/client.go
similarity index 68%
rename from images/transport/client.microgen.go
rename to images/transport/client.go
index d8b9342e..bfa7487c 100644
--- a/images/transport/client.microgen.go
+++ b/images/transport/client.go
@@ -4,12 +4,9 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	images "git.perx.ru/perxis/perxis-go/images"
 	files "git.perx.ru/perxis/perxis-go/pkg/files"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Get(arg0 context.Context, arg1 *files.File, arg2 *images.GetOptions) (res0 *files.File, res1 error) {
@@ -19,9 +16,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 *files.File, arg2 *images
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Result, res1
diff --git a/images/transport/grpc/client.go b/images/transport/grpc/client.go
new file mode 100644
index 00000000..167b6928
--- /dev/null
+++ b/images/transport/grpc/client.go
@@ -0,0 +1,17 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/images/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint: grpcerr.ClientMiddleware(c.GetEndpoint),
+	}
+}
diff --git a/images/transport/grpc/server.go b/images/transport/grpc/server.go
new file mode 100644
index 00000000..c36a57b0
--- /dev/null
+++ b/images/transport/grpc/server.go
@@ -0,0 +1,17 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/images"
+	"git.perx.ru/perxis/perxis-go/images/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/images"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc images.Images, opts ...grpckit.ServerOption) pb.ImagesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint: grpcerr.ServerMiddleware(eps.GetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/account/client.go b/pkg/account/client.go
index 112a71f6..5349ed29 100644
--- a/pkg/account/client.go
+++ b/pkg/account/client.go
@@ -34,10 +34,10 @@ func NewClient(conn *grpc.ClientConn, opts ...Option) *Account {
 		c.logger = zap.NewNop()
 	}
 
-	client.Members = membersTransport.NewGRPCClient(conn, "", c.clientOptions...)
-	client.Organizations = organizationsTransport.NewGRPCClient(conn, "", c.clientOptions...)
-	client.Users = usersTransport.NewGRPCClient(conn, "", c.clientOptions...)
-	client.MembersObserver = membersObserverTransport.NewGRPCClient(conn, "", c.clientOptions...)
+	client.Members = membersTransport.NewClient(conn, c.clientOptions...)
+	client.Organizations = organizationsTransport.NewClient(conn, c.clientOptions...)
+	client.Users = usersTransport.NewClient(conn, c.clientOptions...)
+	client.MembersObserver = membersObserverTransport.NewClient(conn, c.clientOptions...)
 
 	if !c.noCache {
 		client = WithCaching(client, DefaultCacheSize, DefaultCacheTTL)
diff --git a/pkg/account/versions/transport/client.microgen.go b/pkg/account/versions/transport/client.go
similarity index 62%
rename from pkg/account/versions/transport/client.microgen.go
rename to pkg/account/versions/transport/client.go
index ec9a6965..0713d94a 100644
--- a/pkg/account/versions/transport/client.microgen.go
+++ b/pkg/account/versions/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	version "git.perx.ru/perxis/perxis-go/pkg/version"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Get(arg0 context.Context) (res0 *version.Version, res1 error) {
 	request := GetRequest{}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Version, res1
diff --git a/pkg/account/versions/transport/grpc/client.go b/pkg/account/versions/transport/grpc/client.go
new file mode 100644
index 00000000..e5a94578
--- /dev/null
+++ b/pkg/account/versions/transport/grpc/client.go
@@ -0,0 +1,17 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/account/versions/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint: grpcerr.ClientMiddleware(c.GetEndpoint),
+	}
+}
diff --git a/pkg/account/versions/transport/grpc/server.go b/pkg/account/versions/transport/grpc/server.go
new file mode 100644
index 00000000..960a9d0f
--- /dev/null
+++ b/pkg/account/versions/transport/grpc/server.go
@@ -0,0 +1,17 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/account/versions/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	versions "git.perx.ru/perxis/perxis-go/pkg/version"
+	pb "git.perx.ru/perxis/perxis-go/proto/versions/account"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc versions.Versions, opts ...grpckit.ServerOption) pb.VersionsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint: grpcerr.ServerMiddleware(eps.GetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/clients/transport/client.microgen.go b/pkg/clients/transport/client.go
similarity index 66%
rename from pkg/clients/transport/client.microgen.go
rename to pkg/clients/transport/client.go
index 633855af..008f60b0 100644
--- a/pkg/clients/transport/client.microgen.go
+++ b/pkg/clients/transport/client.go
@@ -4,19 +4,13 @@ package transport
 
 import (
 	"context"
-	"errors"
 	clients "git.perx.ru/perxis/perxis-go/pkg/clients"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *clients.Client) (res0 *clients.Client, res1 error) {
 	request := CreateRequest{Client: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -29,9 +23,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Client, res1
@@ -44,9 +35,6 @@ func (set EndpointsSet) GetBy(arg0 context.Context, arg1 string, arg2 *clients.G
 	}
 	response, res1 := set.GetByEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetByResponse).Client, res1
@@ -56,9 +44,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string) (res0 []*clients
 	request := ListRequest{SpaceId: arg1}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Clients, res1
@@ -68,9 +53,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *clients.Client) (res0
 	request := UpdateRequest{Client: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -83,9 +65,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -99,9 +78,6 @@ func (set EndpointsSet) Enable(arg0 context.Context, arg1 string, arg2 string, a
 	}
 	_, res0 = set.EnableEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/clients/transport/grpc/client.go b/pkg/clients/transport/grpc/client.go
new file mode 100644
index 00000000..fe6ba6fc
--- /dev/null
+++ b/pkg/clients/transport/grpc/client.go
@@ -0,0 +1,23 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/clients/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		GetEndpoint:    grpcerr.ClientMiddleware(c.GetEndpoint),
+		GetByEndpoint:  grpcerr.ClientMiddleware(c.GetByEndpoint),
+		ListEndpoint:   grpcerr.ClientMiddleware(c.ListEndpoint),
+		UpdateEndpoint: grpcerr.ClientMiddleware(c.UpdateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		EnableEndpoint: grpcerr.ClientMiddleware(c.EnableEndpoint),
+	}
+}
diff --git a/pkg/clients/transport/grpc/server.go b/pkg/clients/transport/grpc/server.go
new file mode 100644
index 00000000..ee019551
--- /dev/null
+++ b/pkg/clients/transport/grpc/server.go
@@ -0,0 +1,23 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/clients"
+	"git.perx.ru/perxis/perxis-go/pkg/clients/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/clients"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc clients.Clients, opts ...grpckit.ServerOption) pb.ClientsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		GetEndpoint:    grpcerr.ServerMiddleware(eps.GetEndpoint),
+		GetByEndpoint:  grpcerr.ServerMiddleware(eps.GetByEndpoint),
+		ListEndpoint:   grpcerr.ServerMiddleware(eps.ListEndpoint),
+		UpdateEndpoint: grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		EnableEndpoint: grpcerr.ServerMiddleware(eps.EnableEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/collaborators/transport/client.microgen.go b/pkg/collaborators/transport/client.go
similarity index 67%
rename from pkg/collaborators/transport/client.microgen.go
rename to pkg/collaborators/transport/client.go
index eb0dbbe7..1e6477a1 100644
--- a/pkg/collaborators/transport/client.microgen.go
+++ b/pkg/collaborators/transport/client.go
@@ -4,11 +4,8 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	collaborators "git.perx.ru/perxis/perxis-go/pkg/collaborators"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Set(arg0 context.Context, arg1 string, arg2 string, arg3 string) (res0 error) {
@@ -19,9 +16,6 @@ func (set EndpointsSet) Set(arg0 context.Context, arg1 string, arg2 string, arg3
 	}
 	_, res0 = set.SetEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -34,9 +28,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Role, res1
@@ -49,9 +40,6 @@ func (set EndpointsSet) Remove(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.RemoveEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -61,9 +49,6 @@ func (set EndpointsSet) ListCollaborators(arg0 context.Context, arg1 string) (re
 	request := ListCollaboratorsRequest{SpaceId: arg1}
 	response, res1 := set.ListCollaboratorsEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListCollaboratorsResponse).Collaborators, res1
@@ -73,9 +58,6 @@ func (set EndpointsSet) ListSpaces(arg0 context.Context, arg1 string) (res0 []*c
 	request := ListSpacesRequest{Subject: arg1}
 	response, res1 := set.ListSpacesEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListSpacesResponse).Spaces, res1
diff --git a/pkg/collaborators/transport/grpc/client.go b/pkg/collaborators/transport/grpc/client.go
new file mode 100644
index 00000000..ed7c951f
--- /dev/null
+++ b/pkg/collaborators/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/collaborators/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint:               grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListSpacesEndpoint:        grpcerr.ClientMiddleware(c.ListSpacesEndpoint),
+		ListCollaboratorsEndpoint: grpcerr.ClientMiddleware(c.ListCollaboratorsEndpoint),
+		RemoveEndpoint:            grpcerr.ClientMiddleware(c.RemoveEndpoint),
+		SetEndpoint:               grpcerr.ClientMiddleware(c.SetEndpoint),
+	}
+}
diff --git a/pkg/collaborators/transport/grpc/server.go b/pkg/collaborators/transport/grpc/server.go
new file mode 100644
index 00000000..fa96dd48
--- /dev/null
+++ b/pkg/collaborators/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/collaborators"
+	"git.perx.ru/perxis/perxis-go/pkg/collaborators/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/collaborators"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc collaborators.Collaborators, opts ...grpckit.ServerOption) pb.CollaboratorsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint:               grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListSpacesEndpoint:        grpcerr.ServerMiddleware(eps.ListSpacesEndpoint),
+		ListCollaboratorsEndpoint: grpcerr.ServerMiddleware(eps.ListCollaboratorsEndpoint),
+		RemoveEndpoint:            grpcerr.ServerMiddleware(eps.RemoveEndpoint),
+		SetEndpoint:               grpcerr.ServerMiddleware(eps.SetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/collections/transport/client.microgen.go b/pkg/collections/transport/client.go
similarity index 71%
rename from pkg/collections/transport/client.microgen.go
rename to pkg/collections/transport/client.go
index 7fd5b53f..2a430e6c 100644
--- a/pkg/collections/transport/client.microgen.go
+++ b/pkg/collections/transport/client.go
@@ -4,21 +4,15 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	collections "git.perx.ru/perxis/perxis-go/pkg/collections"
 	schema "git.perx.ru/perxis/perxis-go/pkg/schema"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *collections.Collection) (res0 *collections.Collection, res1 error) {
 	request := CreateRequest{Collection: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -33,9 +27,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string, arg3
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Collection, res1
@@ -49,9 +40,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string, arg2 string, arg
 	}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Collections, res1
@@ -61,9 +49,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *collections.Collectio
 	request := UpdateRequest{Coll: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -78,9 +63,6 @@ func (set EndpointsSet) SetSchema(arg0 context.Context, arg1 string, arg2 string
 	}
 	_, res0 = set.SetSchemaEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -98,9 +80,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string, a
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/collections/transport/grpc/client.go b/pkg/collections/transport/grpc/client.go
new file mode 100644
index 00000000..8051b9b9
--- /dev/null
+++ b/pkg/collections/transport/grpc/client.go
@@ -0,0 +1,22 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/collections/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint:    grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint:    grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		GetEndpoint:       grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListEndpoint:      grpcerr.ClientMiddleware(c.ListEndpoint),
+		SetSchemaEndpoint: grpcerr.ClientMiddleware(c.SetSchemaEndpoint),
+		UpdateEndpoint:    grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/collections/transport/grpc/server.go b/pkg/collections/transport/grpc/server.go
new file mode 100644
index 00000000..6482f1c4
--- /dev/null
+++ b/pkg/collections/transport/grpc/server.go
@@ -0,0 +1,22 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/collections"
+	"git.perx.ru/perxis/perxis-go/pkg/collections/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/collections"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc collections.Collections, opts ...grpckit.ServerOption) pb.CollectionsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint:    grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint:    grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		GetEndpoint:       grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListEndpoint:      grpcerr.ServerMiddleware(eps.ListEndpoint),
+		SetSchemaEndpoint: grpcerr.ServerMiddleware(eps.SetSchemaEndpoint),
+		UpdateEndpoint:    grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/content/client.go b/pkg/content/client.go
index bbdd62bb..adc5f784 100644
--- a/pkg/content/client.go
+++ b/pkg/content/client.go
@@ -47,14 +47,14 @@ func NewClient(conn *grpc.ClientConn, opts ...Option) *Content {
 	}
 
 	client.Spaces = spacesTransportGrpc.NewClient(conn, config.ClientOptions...)
-	client.Environments = environmentsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Collections = collectionsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
+	client.Environments = environmentsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Collections = collectionsTransportGrpc.NewClient(conn, config.ClientOptions...)
 	client.Items = itemsTransportGrpc.NewClient(conn, config.ClientOptions...)
-	client.Invitations = invitationsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Collaborators = collaboratorsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Clients = clientsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Locales = localsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Roles = rolesTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
+	client.Invitations = invitationsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Collaborators = collaboratorsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Clients = clientsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Locales = localsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Roles = rolesTransportGrpc.NewClient(conn, config.ClientOptions...)
 	client.References = referencesTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
 
 	if !config.NoDecode {
diff --git a/pkg/content/versions/transport/client.microgen.go b/pkg/content/versions/transport/client.go
similarity index 62%
rename from pkg/content/versions/transport/client.microgen.go
rename to pkg/content/versions/transport/client.go
index ec9a6965..0713d94a 100644
--- a/pkg/content/versions/transport/client.microgen.go
+++ b/pkg/content/versions/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	version "git.perx.ru/perxis/perxis-go/pkg/version"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Get(arg0 context.Context) (res0 *version.Version, res1 error) {
 	request := GetRequest{}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Version, res1
diff --git a/pkg/content/versions/transport/grpc/client.go b/pkg/content/versions/transport/grpc/client.go
new file mode 100644
index 00000000..ffa435b9
--- /dev/null
+++ b/pkg/content/versions/transport/grpc/client.go
@@ -0,0 +1,17 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/content/versions/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint: grpcerr.ClientMiddleware(c.GetEndpoint),
+	}
+}
diff --git a/pkg/content/versions/transport/grpc/server.go b/pkg/content/versions/transport/grpc/server.go
new file mode 100644
index 00000000..26b30d26
--- /dev/null
+++ b/pkg/content/versions/transport/grpc/server.go
@@ -0,0 +1,17 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/content/versions/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	versions "git.perx.ru/perxis/perxis-go/pkg/version"
+	pb "git.perx.ru/perxis/perxis-go/proto/versions/content"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc versions.Versions, opts ...grpckit.ServerOption) pb.VersionsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint: grpcerr.ServerMiddleware(eps.GetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/delivery/transport/client.microgen.go b/pkg/delivery/transport/client.go
similarity index 74%
rename from pkg/delivery/transport/client.microgen.go
rename to pkg/delivery/transport/client.go
index 8f2e1216..39c11002 100644
--- a/pkg/delivery/transport/client.microgen.go
+++ b/pkg/delivery/transport/client.go
@@ -4,23 +4,17 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	collections "git.perx.ru/perxis/perxis-go/pkg/collections"
 	environments "git.perx.ru/perxis/perxis-go/pkg/environments"
 	items "git.perx.ru/perxis/perxis-go/pkg/items"
 	locales "git.perx.ru/perxis/perxis-go/pkg/locales"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) ListLocales(arg0 context.Context, arg1 string) (res0 []*locales.Locale, res1 error) {
 	request := ListLocalesRequest{SpaceId: arg1}
 	response, res1 := set.ListLocalesEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListLocalesResponse).Locales, res1
@@ -33,9 +27,6 @@ func (set EndpointsSet) GetEnvironment(arg0 context.Context, arg1 string, arg2 s
 	}
 	response, res1 := set.GetEnvironmentEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetEnvironmentResponse).Env, res1
@@ -45,9 +36,6 @@ func (set EndpointsSet) ListEnvironments(arg0 context.Context, arg1 string) (res
 	request := ListEnvironmentsRequest{SpaceId: arg1}
 	response, res1 := set.ListEnvironmentsEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListEnvironmentsResponse).Envs, res1
@@ -61,9 +49,6 @@ func (set EndpointsSet) GetCollection(arg0 context.Context, arg1 string, arg2 st
 	}
 	response, res1 := set.GetCollectionEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetCollectionResponse).Collection, res1
@@ -76,9 +61,6 @@ func (set EndpointsSet) ListCollections(arg0 context.Context, arg1 string, arg2
 	}
 	response, res1 := set.ListCollectionsEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListCollectionsResponse).Collections, res1
@@ -94,9 +76,6 @@ func (set EndpointsSet) GetItem(arg0 context.Context, arg1 string, arg2 string,
 	}
 	response, res1 := set.GetItemEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetItemResponse).Item, res1
@@ -112,9 +91,6 @@ func (set EndpointsSet) FindItems(arg0 context.Context, arg1 string, arg2 string
 	}
 	response, res2 := set.FindItemsEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*FindItemsResponse).Items, response.(*FindItemsResponse).Total, res2
@@ -130,9 +106,6 @@ func (set EndpointsSet) Aggregate(arg0 context.Context, arg1 string, arg2 string
 	}
 	response, res1 := set.AggregateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*AggregateResponse).Result, res1
diff --git a/pkg/delivery/transport/grpc/client.go b/pkg/delivery/transport/grpc/client.go
new file mode 100644
index 00000000..551b5d03
--- /dev/null
+++ b/pkg/delivery/transport/grpc/client.go
@@ -0,0 +1,23 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/delivery/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		AggregateEndpoint:        grpcerr.ClientMiddleware(c.AggregateEndpoint),
+		FindItemsEndpoint:        grpcerr.ClientMiddleware(c.FindItemsEndpoint),
+		GetCollectionEndpoint:    grpcerr.ClientMiddleware(c.GetCollectionEndpoint),
+		GetEnvironmentEndpoint:   grpcerr.ClientMiddleware(c.GetEnvironmentEndpoint),
+		ListCollectionsEndpoint:  grpcerr.ClientMiddleware(c.ListCollectionsEndpoint),
+		ListEnvironmentsEndpoint: grpcerr.ClientMiddleware(c.ListEnvironmentsEndpoint),
+		ListLocalesEndpoint:      grpcerr.ClientMiddleware(c.ListLocalesEndpoint),
+	}
+}
diff --git a/pkg/delivery/transport/grpc/server.go b/pkg/delivery/transport/grpc/server.go
new file mode 100644
index 00000000..b5b992ee
--- /dev/null
+++ b/pkg/delivery/transport/grpc/server.go
@@ -0,0 +1,23 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/delivery"
+	"git.perx.ru/perxis/perxis-go/pkg/delivery/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/delivery"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc delivery.Delivery, opts ...grpckit.ServerOption) pb.DeliveryServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		AggregateEndpoint:        grpcerr.ServerMiddleware(eps.AggregateEndpoint),
+		FindItemsEndpoint:        grpcerr.ServerMiddleware(eps.FindItemsEndpoint),
+		GetCollectionEndpoint:    grpcerr.ServerMiddleware(eps.GetCollectionEndpoint),
+		GetEnvironmentEndpoint:   grpcerr.ServerMiddleware(eps.GetEnvironmentEndpoint),
+		ListCollectionsEndpoint:  grpcerr.ServerMiddleware(eps.ListCollectionsEndpoint),
+		ListEnvironmentsEndpoint: grpcerr.ServerMiddleware(eps.ListEnvironmentsEndpoint),
+		ListLocalesEndpoint:      grpcerr.ServerMiddleware(eps.ListLocalesEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/environments/transport/client.microgen.go b/pkg/environments/transport/client.go
similarity index 66%
rename from pkg/environments/transport/client.microgen.go
rename to pkg/environments/transport/client.go
index 96094fda..d562acc2 100644
--- a/pkg/environments/transport/client.microgen.go
+++ b/pkg/environments/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	environments "git.perx.ru/perxis/perxis-go/pkg/environments"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *environments.Environment) (res0 *environments.Environment, res1 error) {
 	request := CreateRequest{Env: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -30,9 +24,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Env, res1
@@ -42,9 +33,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string) (res0 []*environ
 	request := ListRequest{SpaceId: arg1}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Envs, res1
@@ -54,9 +42,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *environments.Environm
 	request := UpdateRequest{Env: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -69,9 +54,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -85,9 +67,6 @@ func (set EndpointsSet) SetAlias(arg0 context.Context, arg1 string, arg2 string,
 	}
 	_, res0 = set.SetAliasEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -101,9 +80,6 @@ func (set EndpointsSet) RemoveAlias(arg0 context.Context, arg1 string, arg2 stri
 	}
 	_, res0 = set.RemoveAliasEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -117,9 +93,6 @@ func (set EndpointsSet) Migrate(arg0 context.Context, arg1 string, arg2 string,
 	}
 	_, res0 = set.MigrateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/environments/transport/grpc/client.go b/pkg/environments/transport/grpc/client.go
new file mode 100644
index 00000000..c882782b
--- /dev/null
+++ b/pkg/environments/transport/grpc/client.go
@@ -0,0 +1,24 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/environments/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint:      grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint:      grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		GetEndpoint:         grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListEndpoint:        grpcerr.ClientMiddleware(c.ListEndpoint),
+		MigrateEndpoint:     grpcerr.ClientMiddleware(c.MigrateEndpoint),
+		RemoveAliasEndpoint: grpcerr.ClientMiddleware(c.RemoveAliasEndpoint),
+		SetAliasEndpoint:    grpcerr.ClientMiddleware(c.SetAliasEndpoint),
+		UpdateEndpoint:      grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/environments/transport/grpc/server.go b/pkg/environments/transport/grpc/server.go
new file mode 100644
index 00000000..ed25b89f
--- /dev/null
+++ b/pkg/environments/transport/grpc/server.go
@@ -0,0 +1,24 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/environments"
+	"git.perx.ru/perxis/perxis-go/pkg/environments/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/environments"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc environments.Environments, opts ...grpckit.ServerOption) pb.EnvironmentsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint:      grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint:      grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		GetEndpoint:         grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListEndpoint:        grpcerr.ServerMiddleware(eps.ListEndpoint),
+		MigrateEndpoint:     grpcerr.ServerMiddleware(eps.MigrateEndpoint),
+		RemoveAliasEndpoint: grpcerr.ServerMiddleware(eps.RemoveAliasEndpoint),
+		SetAliasEndpoint:    grpcerr.ServerMiddleware(eps.SetAliasEndpoint),
+		UpdateEndpoint:      grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/files/transport/client.microgen.go b/pkg/files/transport/client.go
similarity index 66%
rename from pkg/files/transport/client.microgen.go
rename to pkg/files/transport/client.go
index 6320c479..09bf05fe 100644
--- a/pkg/files/transport/client.microgen.go
+++ b/pkg/files/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	files "git.perx.ru/perxis/perxis-go/pkg/files"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) StartUpload(arg0 context.Context, arg1 *files.MultipartUpload) (res0 *files.MultipartUpload, res1 error) {
 	request := StartUploadRequest{Upload: arg1}
 	response, res1 := set.StartUploadEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*StartUploadResponse).U, res1
@@ -27,9 +21,6 @@ func (set EndpointsSet) CompleteUpload(arg0 context.Context, arg1 *files.Multipa
 	request := CompleteUploadRequest{Upload: arg1}
 	response, res1 := set.CompleteUploadEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CompleteUploadResponse).U, res1
@@ -39,9 +30,6 @@ func (set EndpointsSet) AbortUpload(arg0 context.Context, arg1 *files.MultipartU
 	request := AbortUploadRequest{Upload: arg1}
 	_, res0 = set.AbortUploadEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -51,9 +39,6 @@ func (set EndpointsSet) MoveUpload(arg0 context.Context, arg1 *files.MultipartUp
 	request := MoveUploadRequest{Upload: arg1}
 	response, res1 := set.MoveUploadEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*MoveUploadResponse).File, res1
@@ -63,9 +48,6 @@ func (set EndpointsSet) Upload(arg0 context.Context, arg1 *files.File) (res0 *fi
 	request := UploadRequest{File: arg1}
 	response, res1 := set.UploadEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*UploadResponse).U, res1
@@ -75,9 +57,6 @@ func (set EndpointsSet) GetFile(arg0 context.Context, arg1 *files.File) (res0 *f
 	request := GetFileRequest{File: arg1}
 	response, res1 := set.GetFileEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetFileResponse).F, res1
@@ -87,9 +66,6 @@ func (set EndpointsSet) DeleteFile(arg0 context.Context, arg1 *files.File) (res0
 	request := DeleteFileRequest{File: arg1}
 	_, res0 = set.DeleteFileEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/files/transport/grpc/client.go b/pkg/files/transport/grpc/client.go
new file mode 100644
index 00000000..e528e995
--- /dev/null
+++ b/pkg/files/transport/grpc/client.go
@@ -0,0 +1,23 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/files/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		AbortUploadEndpoint:    grpcerr.ClientMiddleware(c.AbortUploadEndpoint),
+		CompleteUploadEndpoint: grpcerr.ClientMiddleware(c.CompleteUploadEndpoint),
+		DeleteFileEndpoint:     grpcerr.ClientMiddleware(c.DeleteFileEndpoint),
+		GetFileEndpoint:        grpcerr.ClientMiddleware(c.GetFileEndpoint),
+		MoveUploadEndpoint:     grpcerr.ClientMiddleware(c.MoveUploadEndpoint),
+		StartUploadEndpoint:    grpcerr.ClientMiddleware(c.StartUploadEndpoint),
+		UploadEndpoint:         grpcerr.ClientMiddleware(c.UploadEndpoint),
+	}
+}
diff --git a/pkg/files/transport/grpc/server.go b/pkg/files/transport/grpc/server.go
new file mode 100644
index 00000000..dcfc0759
--- /dev/null
+++ b/pkg/files/transport/grpc/server.go
@@ -0,0 +1,23 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/files"
+	"git.perx.ru/perxis/perxis-go/pkg/files/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/files"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc files.Files, opts ...grpckit.ServerOption) pb.FilesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		AbortUploadEndpoint:    grpcerr.ServerMiddleware(eps.AbortUploadEndpoint),
+		CompleteUploadEndpoint: grpcerr.ServerMiddleware(eps.CompleteUploadEndpoint),
+		DeleteFileEndpoint:     grpcerr.ServerMiddleware(eps.DeleteFileEndpoint),
+		GetFileEndpoint:        grpcerr.ServerMiddleware(eps.GetFileEndpoint),
+		MoveUploadEndpoint:     grpcerr.ServerMiddleware(eps.MoveUploadEndpoint),
+		StartUploadEndpoint:    grpcerr.ServerMiddleware(eps.StartUploadEndpoint),
+		UploadEndpoint:         grpcerr.ServerMiddleware(eps.UploadEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/invitations/transport/client.microgen.go b/pkg/invitations/transport/client.go
similarity index 67%
rename from pkg/invitations/transport/client.microgen.go
rename to pkg/invitations/transport/client.go
index 6f896b0e..04ad5567 100644
--- a/pkg/invitations/transport/client.microgen.go
+++ b/pkg/invitations/transport/client.go
@@ -4,21 +4,15 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	invitations "git.perx.ru/perxis/perxis-go/pkg/invitations"
 	"git.perx.ru/perxis/perxis-go/pkg/options"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *invitations.Invitation) (res0 *invitations.Invitation, res1 error) {
 	request := CreateRequest{Invitation: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -28,9 +22,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string) (res0 *invitation
 	request := GetRequest{InvitationId: arg1}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Invitation, res1
@@ -43,9 +34,6 @@ func (set EndpointsSet) Accept(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.AcceptEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -58,9 +46,6 @@ func (set EndpointsSet) Find(arg0 context.Context, arg1 *invitations.Filter, arg
 	}
 	response, res2 := set.FindEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*FindResponse).Invitations, response.(*FindResponse).Total, res2
@@ -70,9 +55,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string) (res0 error) {
 	request := DeleteRequest{InvitationId: arg1}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/invitations/transport/grpc/client.go b/pkg/invitations/transport/grpc/client.go
new file mode 100644
index 00000000..995dc563
--- /dev/null
+++ b/pkg/invitations/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/invitations/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		AcceptEndpoint: grpcerr.ClientMiddleware(c.AcceptEndpoint),
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		FindEndpoint:   grpcerr.ClientMiddleware(c.FindEndpoint),
+		GetEndpoint:    grpcerr.ClientMiddleware(c.GetEndpoint),
+	}
+}
diff --git a/pkg/invitations/transport/grpc/server.go b/pkg/invitations/transport/grpc/server.go
new file mode 100644
index 00000000..f0a23fcd
--- /dev/null
+++ b/pkg/invitations/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/invitations"
+	"git.perx.ru/perxis/perxis-go/pkg/invitations/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/invitations"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc invitations.Invitations, opts ...grpckit.ServerOption) pb.InvitationsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		AcceptEndpoint: grpcerr.ServerMiddleware(eps.AcceptEndpoint),
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		FindEndpoint:   grpcerr.ServerMiddleware(eps.FindEndpoint),
+		GetEndpoint:    grpcerr.ServerMiddleware(eps.GetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/locales/transport/client.microgen.go b/pkg/locales/transport/client.go
similarity index 65%
rename from pkg/locales/transport/client.microgen.go
rename to pkg/locales/transport/client.go
index f8cd9dee..7aa15eda 100644
--- a/pkg/locales/transport/client.microgen.go
+++ b/pkg/locales/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	locales "git.perx.ru/perxis/perxis-go/pkg/locales"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *locales.Locale) (res0 *locales.Locale, res1 error) {
 	request := CreateRequest{Locale: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -27,9 +21,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string) (res0 []*locales
 	request := ListRequest{SpaceId: arg1}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Locales, res1
@@ -42,9 +33,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/locales/transport/grpc/client.go b/pkg/locales/transport/grpc/client.go
new file mode 100644
index 00000000..8c1687cd
--- /dev/null
+++ b/pkg/locales/transport/grpc/client.go
@@ -0,0 +1,19 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/locales/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		ListEndpoint:   grpcerr.ClientMiddleware(c.ListEndpoint),
+	}
+}
diff --git a/pkg/locales/transport/grpc/server.go b/pkg/locales/transport/grpc/server.go
new file mode 100644
index 00000000..7e7667cf
--- /dev/null
+++ b/pkg/locales/transport/grpc/server.go
@@ -0,0 +1,19 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/locales"
+	"git.perx.ru/perxis/perxis-go/pkg/locales/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/locales"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc locales.Locales, opts ...grpckit.ServerOption) pb.LocalesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		ListEndpoint:   grpcerr.ServerMiddleware(eps.ListEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/members/observer/transport/client.microgen.go b/pkg/members/observer/transport/client.go
similarity index 68%
rename from pkg/members/observer/transport/client.microgen.go
rename to pkg/members/observer/transport/client.go
index 28ca2a88..957fd556 100644
--- a/pkg/members/observer/transport/client.microgen.go
+++ b/pkg/members/observer/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	collaborators "git.perx.ru/perxis/perxis-go/pkg/collaborators"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) OnCollaboratorSet(arg0 context.Context, arg1 *collaborators.Collaborator) (res0 string, res1 error) {
 	request := OnCollaboratorSetRequest{Collaborator: arg1}
 	response, res1 := set.OnCollaboratorSetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*OnCollaboratorSetResponse).DelayedTaskID, res1
diff --git a/pkg/members/observer/transport/grpc/client.go b/pkg/members/observer/transport/grpc/client.go
new file mode 100644
index 00000000..321ee07d
--- /dev/null
+++ b/pkg/members/observer/transport/grpc/client.go
@@ -0,0 +1,17 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/members/observer/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		OnCollaboratorSetEndpoint: grpcerr.ClientMiddleware(c.OnCollaboratorSetEndpoint),
+	}
+}
diff --git a/pkg/members/observer/transport/grpc/server.go b/pkg/members/observer/transport/grpc/server.go
new file mode 100644
index 00000000..beb4b614
--- /dev/null
+++ b/pkg/members/observer/transport/grpc/server.go
@@ -0,0 +1,17 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/members/observer"
+	"git.perx.ru/perxis/perxis-go/pkg/members/observer/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/members"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc observer.Observer, opts ...grpckit.ServerOption) pb.ObserverServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		OnCollaboratorSetEndpoint: grpcerr.ServerMiddleware(eps.OnCollaboratorSetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/members/transport/client.microgen.go b/pkg/members/transport/client.go
similarity index 68%
rename from pkg/members/transport/client.microgen.go
rename to pkg/members/transport/client.go
index 4cd10cad..8b3b27bd 100644
--- a/pkg/members/transport/client.microgen.go
+++ b/pkg/members/transport/client.go
@@ -4,11 +4,8 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	members "git.perx.ru/perxis/perxis-go/pkg/members"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Set(arg0 context.Context, arg1 string, arg2 string, arg3 members.Role) (res0 error) {
@@ -19,9 +16,6 @@ func (set EndpointsSet) Set(arg0 context.Context, arg1 string, arg2 string, arg3
 	}
 	_, res0 = set.SetEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -34,9 +28,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Role, res1
@@ -49,9 +40,6 @@ func (set EndpointsSet) Remove(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.RemoveEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -65,9 +53,6 @@ func (set EndpointsSet) ListMembers(arg0 context.Context, arg1 string) (res0 []*
 	request := ListMembersRequest{OrgId: arg1}
 	response, res1 := set.ListMembersEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListMembersResponse).Members, res1
@@ -77,9 +62,6 @@ func (set EndpointsSet) ListOrganizations(arg0 context.Context, arg1 string) (re
 	request := ListOrganizationsRequest{UserId: arg1}
 	response, res1 := set.ListOrganizationsEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListOrganizationsResponse).Organizations, res1
diff --git a/pkg/members/transport/grpc/client.go b/pkg/members/transport/grpc/client.go
new file mode 100644
index 00000000..dc79e343
--- /dev/null
+++ b/pkg/members/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/members/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint:               grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListMembersEndpoint:       grpcerr.ClientMiddleware(c.ListMembersEndpoint),
+		ListOrganizationsEndpoint: grpcerr.ClientMiddleware(c.ListOrganizationsEndpoint),
+		RemoveEndpoint:            grpcerr.ClientMiddleware(c.RemoveEndpoint),
+		SetEndpoint:               grpcerr.ClientMiddleware(c.SetEndpoint),
+	}
+}
diff --git a/pkg/members/transport/grpc/server.go b/pkg/members/transport/grpc/server.go
new file mode 100644
index 00000000..d8704816
--- /dev/null
+++ b/pkg/members/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/members"
+	"git.perx.ru/perxis/perxis-go/pkg/members/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/members"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc members.Members, opts ...grpckit.ServerOption) pb.MembersServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint:               grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListMembersEndpoint:       grpcerr.ServerMiddleware(eps.ListMembersEndpoint),
+		ListOrganizationsEndpoint: grpcerr.ServerMiddleware(eps.ListOrganizationsEndpoint),
+		RemoveEndpoint:            grpcerr.ServerMiddleware(eps.RemoveEndpoint),
+		SetEndpoint:               grpcerr.ServerMiddleware(eps.SetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/organizations/transport/client.microgen.go b/pkg/organizations/transport/client.go
similarity index 67%
rename from pkg/organizations/transport/client.microgen.go
rename to pkg/organizations/transport/client.go
index 00b14af7..e08e3346 100644
--- a/pkg/organizations/transport/client.microgen.go
+++ b/pkg/organizations/transport/client.go
@@ -4,21 +4,15 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	options "git.perx.ru/perxis/perxis-go/pkg/options"
 	organizations "git.perx.ru/perxis/perxis-go/pkg/organizations"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *organizations.Organization) (res0 *organizations.Organization, res1 error) {
 	request := CreateRequest{Org: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -28,9 +22,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string) (res0 *organizati
 	request := GetRequest{OrgId: arg1}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Org, res1
@@ -40,9 +31,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *organizations.Organiz
 	request := UpdateRequest{Org: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -52,9 +40,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string) (res0 error) {
 	request := DeleteRequest{OrgId: arg1}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -67,9 +52,6 @@ func (set EndpointsSet) Find(arg0 context.Context, arg1 *organizations.Filter, a
 	}
 	response, res2 := set.FindEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*FindResponse).Orgs, response.(*FindResponse).Total, res2
diff --git a/pkg/organizations/transport/grpc/client.go b/pkg/organizations/transport/grpc/client.go
new file mode 100644
index 00000000..3e8793d1
--- /dev/null
+++ b/pkg/organizations/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/organizations/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		FindEndpoint:   grpcerr.ClientMiddleware(c.FindEndpoint),
+		GetEndpoint:    grpcerr.ClientMiddleware(c.GetEndpoint),
+		UpdateEndpoint: grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/organizations/transport/grpc/server.go b/pkg/organizations/transport/grpc/server.go
new file mode 100644
index 00000000..8748dabd
--- /dev/null
+++ b/pkg/organizations/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/organizations"
+	"git.perx.ru/perxis/perxis-go/pkg/organizations/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/organizations"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc organizations.Organizations, opts ...grpckit.ServerOption) pb.OrganizationsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		FindEndpoint:   grpcerr.ServerMiddleware(eps.FindEndpoint),
+		GetEndpoint:    grpcerr.ServerMiddleware(eps.GetEndpoint),
+		UpdateEndpoint: grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/references/transport/client.microgen.go b/pkg/references/transport/client.go
similarity index 76%
rename from pkg/references/transport/client.microgen.go
rename to pkg/references/transport/client.go
index 5c0eb414..54cf13e3 100644
--- a/pkg/references/transport/client.microgen.go
+++ b/pkg/references/transport/client.go
@@ -4,12 +4,9 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	items "git.perx.ru/perxis/perxis-go/pkg/items"
 	references "git.perx.ru/perxis/perxis-go/pkg/references"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string, arg3 []*references.Reference) (res0 []*items.Item, res1 []*references.Reference, res2 error) {
@@ -20,9 +17,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string, arg3
 	}
 	response, res2 := set.GetEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Items, response.(*GetResponse).Notfound, res2
@@ -38,9 +32,6 @@ func (set EndpointsSet) Publish(arg0 context.Context, arg1 string, arg2 string,
 	}
 	response, res3 := set.PublishEndpoint(arg0, &request)
 	if res3 != nil {
-		if e, ok := status.FromError(res3); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res3 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*PublishResponse).Published, response.(*PublishResponse).Notfound, response.(*PublishResponse).Unpublished, res3
diff --git a/pkg/references/transport/grpc/client.go b/pkg/references/transport/grpc/client.go
new file mode 100644
index 00000000..01e5debd
--- /dev/null
+++ b/pkg/references/transport/grpc/client.go
@@ -0,0 +1,18 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/references/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint:     grpcerr.ClientMiddleware(c.GetEndpoint),
+		PublishEndpoint: grpcerr.ClientMiddleware(c.PublishEndpoint),
+	}
+}
diff --git a/pkg/references/transport/grpc/server.go b/pkg/references/transport/grpc/server.go
new file mode 100644
index 00000000..32a4beac
--- /dev/null
+++ b/pkg/references/transport/grpc/server.go
@@ -0,0 +1,18 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/references"
+	"git.perx.ru/perxis/perxis-go/pkg/references/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/references"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc references.References, opts ...grpckit.ServerOption) pb.ReferencesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint:     grpcerr.ServerMiddleware(eps.GetEndpoint),
+		PublishEndpoint: grpcerr.ServerMiddleware(eps.PublishEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/roles/transport/client.microgen.go b/pkg/roles/transport/client.go
similarity index 64%
rename from pkg/roles/transport/client.microgen.go
rename to pkg/roles/transport/client.go
index 71b1de9e..1b36431f 100644
--- a/pkg/roles/transport/client.microgen.go
+++ b/pkg/roles/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	roles "git.perx.ru/perxis/perxis-go/pkg/roles"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *roles.Role) (res0 *roles.Role, res1 error) {
 	request := CreateRequest{Role: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -30,9 +24,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Role, res1
@@ -42,9 +33,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string) (res0 []*roles.R
 	request := ListRequest{SpaceId: arg1}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Roles, res1
@@ -54,9 +42,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *roles.Role) (res0 err
 	request := UpdateRequest{Role: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -69,9 +54,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/roles/transport/grpc/client.go b/pkg/roles/transport/grpc/client.go
new file mode 100644
index 00000000..06a23a7b
--- /dev/null
+++ b/pkg/roles/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/roles/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		GetEndpoint:    grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListEndpoint:   grpcerr.ClientMiddleware(c.ListEndpoint),
+		UpdateEndpoint: grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/roles/transport/grpc/server.go b/pkg/roles/transport/grpc/server.go
new file mode 100644
index 00000000..764efc8a
--- /dev/null
+++ b/pkg/roles/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/roles"
+	"git.perx.ru/perxis/perxis-go/pkg/roles/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/roles"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc roles.Roles, opts ...grpckit.ServerOption) pb.RolesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		GetEndpoint:    grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListEndpoint:   grpcerr.ServerMiddleware(eps.ListEndpoint),
+		UpdateEndpoint: grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/users/transport/client.microgen.go b/pkg/users/transport/client.go
similarity index 66%
rename from pkg/users/transport/client.microgen.go
rename to pkg/users/transport/client.go
index 74ca261a..01537b11 100644
--- a/pkg/users/transport/client.microgen.go
+++ b/pkg/users/transport/client.go
@@ -4,21 +4,15 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	options "git.perx.ru/perxis/perxis-go/pkg/options"
 	users "git.perx.ru/perxis/perxis-go/pkg/users"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *users.User) (res0 *users.User, res1 error) {
 	request := CreateRequest{Create: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).User, res1
@@ -28,9 +22,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string) (res0 *users.User
 	request := GetRequest{UserId: arg1}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).User, res1
@@ -43,9 +34,6 @@ func (set EndpointsSet) Find(arg0 context.Context, arg1 *users.Filter, arg2 *opt
 	}
 	response, res2 := set.FindEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*FindResponse).Users, response.(*FindResponse).Total, res2
@@ -55,9 +43,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *users.User) (res0 err
 	request := UpdateRequest{Update: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -67,9 +52,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string) (res0 error) {
 	request := DeleteRequest{UserId: arg1}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -79,9 +61,6 @@ func (set EndpointsSet) GetByIdentity(arg0 context.Context, arg1 string) (res0 *
 	request := GetByIdentityRequest{Identity: arg1}
 	response, res1 := set.GetByIdentityEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetByIdentityResponse).User, res1
diff --git a/pkg/users/transport/grpc/client.go b/pkg/users/transport/grpc/client.go
new file mode 100644
index 00000000..7364d5fc
--- /dev/null
+++ b/pkg/users/transport/grpc/client.go
@@ -0,0 +1,22 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/users/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint:        grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint:        grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		FindEndpoint:          grpcerr.ClientMiddleware(c.FindEndpoint),
+		GetByIdentityEndpoint: grpcerr.ClientMiddleware(c.GetByIdentityEndpoint),
+		GetEndpoint:           grpcerr.ClientMiddleware(c.GetEndpoint),
+		UpdateEndpoint:        grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/users/transport/grpc/server.go b/pkg/users/transport/grpc/server.go
new file mode 100644
index 00000000..07211008
--- /dev/null
+++ b/pkg/users/transport/grpc/server.go
@@ -0,0 +1,22 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/users"
+	"git.perx.ru/perxis/perxis-go/pkg/users/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/users"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc users.Users, opts ...grpckit.ServerOption) pb.UsersServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint:        grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint:        grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		FindEndpoint:          grpcerr.ServerMiddleware(eps.FindEndpoint),
+		GetByIdentityEndpoint: grpcerr.ServerMiddleware(eps.GetByIdentityEndpoint),
+		GetEndpoint:           grpcerr.ServerMiddleware(eps.GetEndpoint),
+		UpdateEndpoint:        grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
-- 
GitLab