From 35b3bdae78125a5013046b5416ae1082178df000 Mon Sep 17 00:00:00 2001
From: Michiel de Jong <michiel@unhosted.org>
Date: Mon, 11 Oct 2021 14:54:15 +0200
Subject: [PATCH 1/2] Use @grpc/grpc-js and add typings

---
 README.md                                     |   42 +-
 .../group/v1beta1/group_api_grpc_pb.d.ts      |   96 +
 cs3/admin/group/v1beta1/group_api_grpc_pb.js  |    2 +-
 cs3/admin/group/v1beta1/group_api_pb.d.ts     |  251 ++
 cs3/admin/user/v1beta1/user_api_grpc_pb.d.ts  |   59 +
 cs3/admin/user/v1beta1/user_api_grpc_pb.js    |    2 +-
 cs3/admin/user/v1beta1/user_api_pb.d.ts       |  126 ++
 .../v1beta1/provider_api_grpc_pb.d.ts         |   42 +
 .../provider/v1beta1/provider_api_grpc_pb.js  |    2 +-
 cs3/app/provider/v1beta1/provider_api_pb.d.ts |   86 +
 cs3/app/provider/v1beta1/resources_pb.d.ts    |   35 +
 .../v1beta1/registry_api_grpc_pb.d.ts         |  132 ++
 .../registry/v1beta1/registry_api_grpc_pb.js  |    2 +-
 cs3/app/registry/v1beta1/registry_api_pb.d.ts |  359 +++
 cs3/app/registry/v1beta1/resources_pb.d.ts    |  116 +
 .../v1beta1/applications_api_grpc_pb.d.ts     |   97 +
 .../v1beta1/applications_api_grpc_pb.js       |    2 +-
 .../v1beta1/applications_api_pb.d.ts          |  255 +++
 .../applications/v1beta1/resources_pb.d.ts    |   59 +
 .../v1beta1/provider_api_grpc_pb.d.ts         |   42 +
 .../provider/v1beta1/provider_api_grpc_pb.js  |    2 +-
 .../provider/v1beta1/provider_api_pb.d.ts     |   70 +
 cs3/auth/provider/v1beta1/resources_pb.d.ts   |   43 +
 .../v1beta1/registry_api_grpc_pb.d.ts         |   59 +
 .../registry/v1beta1/registry_api_grpc_pb.js  |    2 +-
 .../registry/v1beta1/registry_api_pb.d.ts     |  124 +
 cs3/auth/registry/v1beta1/resources_pb.d.ts   |   40 +
 cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts  | 1548 +++++++++++++
 cs3/gateway/v1beta1/gateway_api_grpc_pb.js    |    2 +-
 cs3/gateway/v1beta1/gateway_api_pb.d.ts       |  438 ++++
 cs3/gateway/v1beta1/resources_pb.d.ts         |   81 +
 .../group/v1beta1/group_api_grpc_pb.d.ts      |  114 +
 .../group/v1beta1/group_api_grpc_pb.js        |    2 +-
 cs3/identity/group/v1beta1/group_api_pb.d.ts  |  323 +++
 cs3/identity/group/v1beta1/resources_pb.d.ts  |   85 +
 cs3/identity/user/v1beta1/resources_pb.d.ts   |  103 +
 .../user/v1beta1/user_api_grpc_pb.d.ts        |   95 +
 cs3/identity/user/v1beta1/user_api_grpc_pb.js |    2 +-
 cs3/identity/user/v1beta1/user_api_pb.d.ts    |  256 +++
 .../core/v1beta1/ocm_core_api_grpc_pb.d.ts    |   42 +
 cs3/ocm/core/v1beta1/ocm_core_api_grpc_pb.js  |    2 +-
 cs3/ocm/core/v1beta1/ocm_core_api_pb.d.ts     |   99 +
 cs3/ocm/core/v1beta1/resources_pb.d.ts        |   32 +
 .../invite/v1beta1/invite_api_grpc_pb.d.ts    |  115 +
 cs3/ocm/invite/v1beta1/invite_api_grpc_pb.js  |    2 +-
 cs3/ocm/invite/v1beta1/invite_api_pb.d.ts     |  312 +++
 cs3/ocm/invite/v1beta1/resources_pb.d.ts      |   43 +
 .../v1beta1/provider_api_grpc_pb.d.ts         |   77 +
 .../provider/v1beta1/provider_api_grpc_pb.js  |    2 +-
 cs3/ocm/provider/v1beta1/provider_api_pb.d.ts |  180 ++
 cs3/ocm/provider/v1beta1/resources_pb.d.ts    |  155 ++
 .../v1beta1/preferences_api_grpc_pb.d.ts      |   57 +
 .../v1beta1/preferences_api_grpc_pb.js        |    2 +-
 .../v1beta1/preferences_api_pb.d.ts           |   98 +
 cs3/rpc/v1beta1/code_pb.d.ts                  |   28 +
 cs3/rpc/v1beta1/status_pb.d.ts                |   38 +
 .../v1beta1/collaboration_api_grpc_pb.d.ts    |  169 ++
 .../v1beta1/collaboration_api_grpc_pb.js      |    2 +-
 .../v1beta1/collaboration_api_pb.d.ts         |  553 +++++
 .../collaboration/v1beta1/resources_pb.d.ts   |  313 +++
 .../link/v1beta1/link_api_grpc_pb.d.ts        |  133 ++
 cs3/sharing/link/v1beta1/link_api_grpc_pb.js  |    2 +-
 cs3/sharing/link/v1beta1/link_api_pb.d.ts     |  499 ++++
 cs3/sharing/link/v1beta1/resources_pb.d.ts    |  260 +++
 cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.d.ts  |  171 ++
 cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.js    |    2 +-
 cs3/sharing/ocm/v1beta1/ocm_api_pb.d.ts       |  599 +++++
 cs3/sharing/ocm/v1beta1/resources_pb.d.ts     |  268 +++
 .../v1beta1/provider_api_grpc_pb.d.ts         |  578 +++++
 .../provider/v1beta1/provider_api_grpc_pb.js  |    2 +-
 .../provider/v1beta1/provider_api_pb.d.ts     | 2014 +++++++++++++++++
 .../provider/v1beta1/resources_pb.d.ts        |  691 ++++++
 .../v1beta1/registry_api_grpc_pb.d.ts         |   78 +
 .../registry/v1beta1/registry_api_grpc_pb.js  |    2 +-
 .../registry/v1beta1/registry_api_pb.d.ts     |  183 ++
 .../registry/v1beta1/resources_pb.d.ts        |   74 +
 cs3/tx/v1beta1/resources_pb.d.ts              |   96 +
 cs3/tx/v1beta1/tx_api_grpc_pb.d.ts            |   78 +
 cs3/tx/v1beta1/tx_api_grpc_pb.js              |    2 +-
 cs3/tx/v1beta1/tx_api_pb.d.ts                 |  201 ++
 cs3/types/v1beta1/types_pb.d.ts               |   74 +
 examples/example.js                           |   78 +
 examples/example.ts                           |   89 +
 package-lock.json                             | 1507 +-----------
 package.json                                  |    8 +-
 85 files changed, 13745 insertions(+), 1461 deletions(-)
 create mode 100644 cs3/admin/group/v1beta1/group_api_grpc_pb.d.ts
 create mode 100644 cs3/admin/group/v1beta1/group_api_pb.d.ts
 create mode 100644 cs3/admin/user/v1beta1/user_api_grpc_pb.d.ts
 create mode 100644 cs3/admin/user/v1beta1/user_api_pb.d.ts
 create mode 100644 cs3/app/provider/v1beta1/provider_api_grpc_pb.d.ts
 create mode 100644 cs3/app/provider/v1beta1/provider_api_pb.d.ts
 create mode 100644 cs3/app/provider/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/app/registry/v1beta1/registry_api_grpc_pb.d.ts
 create mode 100644 cs3/app/registry/v1beta1/registry_api_pb.d.ts
 create mode 100644 cs3/app/registry/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/auth/applications/v1beta1/applications_api_grpc_pb.d.ts
 create mode 100644 cs3/auth/applications/v1beta1/applications_api_pb.d.ts
 create mode 100644 cs3/auth/applications/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/auth/provider/v1beta1/provider_api_grpc_pb.d.ts
 create mode 100644 cs3/auth/provider/v1beta1/provider_api_pb.d.ts
 create mode 100644 cs3/auth/provider/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/auth/registry/v1beta1/registry_api_grpc_pb.d.ts
 create mode 100644 cs3/auth/registry/v1beta1/registry_api_pb.d.ts
 create mode 100644 cs3/auth/registry/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts
 create mode 100644 cs3/gateway/v1beta1/gateway_api_pb.d.ts
 create mode 100644 cs3/gateway/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/identity/group/v1beta1/group_api_grpc_pb.d.ts
 create mode 100644 cs3/identity/group/v1beta1/group_api_pb.d.ts
 create mode 100644 cs3/identity/group/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/identity/user/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/identity/user/v1beta1/user_api_grpc_pb.d.ts
 create mode 100644 cs3/identity/user/v1beta1/user_api_pb.d.ts
 create mode 100644 cs3/ocm/core/v1beta1/ocm_core_api_grpc_pb.d.ts
 create mode 100644 cs3/ocm/core/v1beta1/ocm_core_api_pb.d.ts
 create mode 100644 cs3/ocm/core/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/ocm/invite/v1beta1/invite_api_grpc_pb.d.ts
 create mode 100644 cs3/ocm/invite/v1beta1/invite_api_pb.d.ts
 create mode 100644 cs3/ocm/invite/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/ocm/provider/v1beta1/provider_api_grpc_pb.d.ts
 create mode 100644 cs3/ocm/provider/v1beta1/provider_api_pb.d.ts
 create mode 100644 cs3/ocm/provider/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/preferences/v1beta1/preferences_api_grpc_pb.d.ts
 create mode 100644 cs3/preferences/v1beta1/preferences_api_pb.d.ts
 create mode 100644 cs3/rpc/v1beta1/code_pb.d.ts
 create mode 100644 cs3/rpc/v1beta1/status_pb.d.ts
 create mode 100644 cs3/sharing/collaboration/v1beta1/collaboration_api_grpc_pb.d.ts
 create mode 100644 cs3/sharing/collaboration/v1beta1/collaboration_api_pb.d.ts
 create mode 100644 cs3/sharing/collaboration/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/sharing/link/v1beta1/link_api_grpc_pb.d.ts
 create mode 100644 cs3/sharing/link/v1beta1/link_api_pb.d.ts
 create mode 100644 cs3/sharing/link/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.d.ts
 create mode 100644 cs3/sharing/ocm/v1beta1/ocm_api_pb.d.ts
 create mode 100644 cs3/sharing/ocm/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/storage/provider/v1beta1/provider_api_grpc_pb.d.ts
 create mode 100644 cs3/storage/provider/v1beta1/provider_api_pb.d.ts
 create mode 100644 cs3/storage/provider/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/storage/registry/v1beta1/registry_api_grpc_pb.d.ts
 create mode 100644 cs3/storage/registry/v1beta1/registry_api_pb.d.ts
 create mode 100644 cs3/storage/registry/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/tx/v1beta1/resources_pb.d.ts
 create mode 100644 cs3/tx/v1beta1/tx_api_grpc_pb.d.ts
 create mode 100644 cs3/tx/v1beta1/tx_api_pb.d.ts
 create mode 100644 cs3/types/v1beta1/types_pb.d.ts
 create mode 100644 examples/example.js
 create mode 100644 examples/example.ts

diff --git a/README.md b/README.md
index f2cfc9a..4083e8b 100644
--- a/README.md
+++ b/README.md
@@ -11,43 +11,5 @@ npm i @cs3org/node-cs3apis
 ```
 
 ## Example usage
-```js
-const grpc = require('grpc');
-const { GatewayAPIClient } = require('@cs3org/node-cs3apis/cs3/gateway/v1beta1/gateway_api_grpc_pb');
-const { AuthenticateRequest } = require('@cs3org/node-cs3apis/cs3/gateway/v1beta1/gateway_api_pb');
-
-const TARGET = process.env.TARGET || 'localhost:19000';
-
-const client = new GatewayAPIClient(TARGET, grpc.credentials.createInsecure());
-
-function authenticate(authType, clientId, clientSecret) {
-  const req = new AuthenticateRequest();
-  req.setType(authType);
-  req.setClientId(clientId);
-  req.setClientSecret(clientSecret);
-  return new Promise((resolve, reject) => {
-    client.authenticate(req, (err, response) => {
-      if (err) {
-        reject(err);
-      } else {
-        resolve(response);
-      }
-    });
-  });
-}
-
-async function example() {
-  try {
-    const res = await authenticate('basic', 'einstein', 'relativity');
-    // See:
-    // * AuthenticateResponse https://github.com/cs3org/cs3apis/blob/a86e5cb6ac360/cs3/gateway/v1beta1/gateway_api.proto#L415
-    // * User https://github.com/cs3org/cs3apis/blob/a86e5cb6ac360/cs3/identity/user/v1beta1/resources.proto#L53
-    console.log(res.getUser().getDisplayName());
-  } catch (e) {
-    console.error(e);
-  }
-}
-
-// ...
-example();
-```
+JavaScripters please see [./examples/example.js](./examples/example.js).
+TypeScripters please see [./examples/example.ts](./examples/example.ts).
diff --git a/cs3/admin/group/v1beta1/group_api_grpc_pb.d.ts b/cs3/admin/group/v1beta1/group_api_grpc_pb.d.ts
new file mode 100644
index 0000000..d73759e
--- /dev/null
+++ b/cs3/admin/group/v1beta1/group_api_grpc_pb.d.ts
@@ -0,0 +1,96 @@
+// package: cs3.admin.group.v1beta1
+// file: cs3/admin/group/v1beta1/group_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_admin_group_v1beta1_group_api_pb from '../../../../cs3/admin/group/v1beta1/group_api_pb';
+import * as cs3_identity_group_v1beta1_resources_pb from '../../../../cs3/identity/group/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IGroupAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  createGroup: IGroupAPIService_ICreateGroup;
+  deleteGroup: IGroupAPIService_IDeleteGroup;
+  addUserToGroup: IGroupAPIService_IAddUserToGroup;
+  removeUserFromGroup: IGroupAPIService_IRemoveUserFromGroup;
+}
+
+interface IGroupAPIService_ICreateGroup extends grpc.MethodDefinition<cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest, cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse> {
+  path: '/cs3.admin.group.v1beta1.GroupAPI/CreateGroup'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest>;
+  requestDeserialize: grpc.deserialize<cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest>;
+  responseSerialize: grpc.serialize<cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse>;
+  responseDeserialize: grpc.deserialize<cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse>;
+}
+
+interface IGroupAPIService_IDeleteGroup extends grpc.MethodDefinition<cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest, cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse> {
+  path: '/cs3.admin.group.v1beta1.GroupAPI/DeleteGroup'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest>;
+  requestDeserialize: grpc.deserialize<cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest>;
+  responseSerialize: grpc.serialize<cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse>;
+  responseDeserialize: grpc.deserialize<cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse>;
+}
+
+interface IGroupAPIService_IAddUserToGroup extends grpc.MethodDefinition<cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest, cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse> {
+  path: '/cs3.admin.group.v1beta1.GroupAPI/AddUserToGroup'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest>;
+  requestDeserialize: grpc.deserialize<cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest>;
+  responseSerialize: grpc.serialize<cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse>;
+  responseDeserialize: grpc.deserialize<cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse>;
+}
+
+interface IGroupAPIService_IRemoveUserFromGroup extends grpc.MethodDefinition<cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest, cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse> {
+  path: '/cs3.admin.group.v1beta1.GroupAPI/RemoveUserFromGroup'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest>;
+  requestDeserialize: grpc.deserialize<cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest>;
+  responseSerialize: grpc.serialize<cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse>;
+  responseDeserialize: grpc.deserialize<cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse>;
+}
+
+export const GroupAPIService: IGroupAPIService;
+export interface IGroupAPIServer extends grpc.UntypedServiceImplementation {
+  createGroup: grpc.handleUnaryCall<cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest, cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse>;
+  deleteGroup: grpc.handleUnaryCall<cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest, cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse>;
+  addUserToGroup: grpc.handleUnaryCall<cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest, cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse>;
+  removeUserFromGroup: grpc.handleUnaryCall<cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest, cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse>;
+}
+
+export interface IGroupAPIClient {
+  createGroup(request: cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse) => void): grpc.ClientUnaryCall;
+  createGroup(request: cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse) => void): grpc.ClientUnaryCall;
+  createGroup(request: cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse) => void): grpc.ClientUnaryCall;
+  deleteGroup(request: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse) => void): grpc.ClientUnaryCall;
+  deleteGroup(request: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse) => void): grpc.ClientUnaryCall;
+  deleteGroup(request: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse) => void): grpc.ClientUnaryCall;
+  addUserToGroup(request: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse) => void): grpc.ClientUnaryCall;
+  addUserToGroup(request: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse) => void): grpc.ClientUnaryCall;
+  addUserToGroup(request: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse) => void): grpc.ClientUnaryCall;
+  removeUserFromGroup(request: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse) => void): grpc.ClientUnaryCall;
+  removeUserFromGroup(request: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse) => void): grpc.ClientUnaryCall;
+  removeUserFromGroup(request: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class GroupAPIClient extends grpc.Client implements IGroupAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public createGroup(request: cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse) => void): grpc.ClientUnaryCall;
+  public createGroup(request: cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse) => void): grpc.ClientUnaryCall;
+  public createGroup(request: cs3_admin_group_v1beta1_group_api_pb.CreateGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.CreateGroupResponse) => void): grpc.ClientUnaryCall;
+  public deleteGroup(request: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse) => void): grpc.ClientUnaryCall;
+  public deleteGroup(request: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse) => void): grpc.ClientUnaryCall;
+  public deleteGroup(request: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.DeleteGroupResponse) => void): grpc.ClientUnaryCall;
+  public addUserToGroup(request: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse) => void): grpc.ClientUnaryCall;
+  public addUserToGroup(request: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse) => void): grpc.ClientUnaryCall;
+  public addUserToGroup(request: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.AddUserToGroupResponse) => void): grpc.ClientUnaryCall;
+  public removeUserFromGroup(request: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse) => void): grpc.ClientUnaryCall;
+  public removeUserFromGroup(request: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse) => void): grpc.ClientUnaryCall;
+  public removeUserFromGroup(request: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_group_v1beta1_group_api_pb.RemoveUserFromGroupResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/admin/group/v1beta1/group_api_grpc_pb.js b/cs3/admin/group/v1beta1/group_api_grpc_pb.js
index f55c075..56d303b 100644
--- a/cs3/admin/group/v1beta1/group_api_grpc_pb.js
+++ b/cs3/admin/group/v1beta1/group_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_admin_group_v1beta1_group_api_pb = require('../../../../cs3/admin/group/v1beta1/group_api_pb.js');
 var cs3_identity_group_v1beta1_resources_pb = require('../../../../cs3/identity/group/v1beta1/resources_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
diff --git a/cs3/admin/group/v1beta1/group_api_pb.d.ts b/cs3/admin/group/v1beta1/group_api_pb.d.ts
new file mode 100644
index 0000000..4356e99
--- /dev/null
+++ b/cs3/admin/group/v1beta1/group_api_pb.d.ts
@@ -0,0 +1,251 @@
+// package: cs3.admin.group.v1beta1
+// file: cs3/admin/group/v1beta1/group_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_group_v1beta1_resources_pb from '../../../../cs3/identity/group/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class CreateGroupRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasGroup(): boolean;
+  clearGroup(): void;
+  getGroup(): cs3_identity_group_v1beta1_resources_pb.Group | undefined;
+  setGroup(value?: cs3_identity_group_v1beta1_resources_pb.Group): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateGroupRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateGroupRequest): CreateGroupRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateGroupRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateGroupRequest;
+  static deserializeBinaryFromReader(message: CreateGroupRequest, reader: jspb.BinaryReader): CreateGroupRequest;
+}
+
+export namespace CreateGroupRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    group?: cs3_identity_group_v1beta1_resources_pb.Group.AsObject,
+  }
+}
+
+export class CreateGroupResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasGroup(): boolean;
+  clearGroup(): void;
+  getGroup(): cs3_identity_group_v1beta1_resources_pb.Group | undefined;
+  setGroup(value?: cs3_identity_group_v1beta1_resources_pb.Group): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateGroupResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateGroupResponse): CreateGroupResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateGroupResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateGroupResponse;
+  static deserializeBinaryFromReader(message: CreateGroupResponse, reader: jspb.BinaryReader): CreateGroupResponse;
+}
+
+export namespace CreateGroupResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    group?: cs3_identity_group_v1beta1_resources_pb.Group.AsObject,
+  }
+}
+
+export class DeleteGroupRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasGroupId(): boolean;
+  clearGroupId(): void;
+  getGroupId(): cs3_identity_group_v1beta1_resources_pb.GroupId | undefined;
+  setGroupId(value?: cs3_identity_group_v1beta1_resources_pb.GroupId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DeleteGroupRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: DeleteGroupRequest): DeleteGroupRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DeleteGroupRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DeleteGroupRequest;
+  static deserializeBinaryFromReader(message: DeleteGroupRequest, reader: jspb.BinaryReader): DeleteGroupRequest;
+}
+
+export namespace DeleteGroupRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    groupId?: cs3_identity_group_v1beta1_resources_pb.GroupId.AsObject,
+  }
+}
+
+export class DeleteGroupResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DeleteGroupResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: DeleteGroupResponse): DeleteGroupResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DeleteGroupResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DeleteGroupResponse;
+  static deserializeBinaryFromReader(message: DeleteGroupResponse, reader: jspb.BinaryReader): DeleteGroupResponse;
+}
+
+export namespace DeleteGroupResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class AddUserToGroupRequest extends jspb.Message {
+  hasUserId(): boolean;
+  clearUserId(): void;
+  getUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasGroupId(): boolean;
+  clearGroupId(): void;
+  getGroupId(): cs3_identity_group_v1beta1_resources_pb.GroupId | undefined;
+  setGroupId(value?: cs3_identity_group_v1beta1_resources_pb.GroupId): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AddUserToGroupRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: AddUserToGroupRequest): AddUserToGroupRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AddUserToGroupRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AddUserToGroupRequest;
+  static deserializeBinaryFromReader(message: AddUserToGroupRequest, reader: jspb.BinaryReader): AddUserToGroupRequest;
+}
+
+export namespace AddUserToGroupRequest {
+  export type AsObject = {
+    userId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    groupId?: cs3_identity_group_v1beta1_resources_pb.GroupId.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class AddUserToGroupResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AddUserToGroupResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: AddUserToGroupResponse): AddUserToGroupResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AddUserToGroupResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AddUserToGroupResponse;
+  static deserializeBinaryFromReader(message: AddUserToGroupResponse, reader: jspb.BinaryReader): AddUserToGroupResponse;
+}
+
+export namespace AddUserToGroupResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class RemoveUserFromGroupRequest extends jspb.Message {
+  hasUserId(): boolean;
+  clearUserId(): void;
+  getUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasGroupId(): boolean;
+  clearGroupId(): void;
+  getGroupId(): cs3_identity_group_v1beta1_resources_pb.GroupId | undefined;
+  setGroupId(value?: cs3_identity_group_v1beta1_resources_pb.GroupId): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemoveUserFromGroupRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: RemoveUserFromGroupRequest): RemoveUserFromGroupRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemoveUserFromGroupRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemoveUserFromGroupRequest;
+  static deserializeBinaryFromReader(message: RemoveUserFromGroupRequest, reader: jspb.BinaryReader): RemoveUserFromGroupRequest;
+}
+
+export namespace RemoveUserFromGroupRequest {
+  export type AsObject = {
+    userId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    groupId?: cs3_identity_group_v1beta1_resources_pb.GroupId.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class RemoveUserFromGroupResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemoveUserFromGroupResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: RemoveUserFromGroupResponse): RemoveUserFromGroupResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemoveUserFromGroupResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemoveUserFromGroupResponse;
+  static deserializeBinaryFromReader(message: RemoveUserFromGroupResponse, reader: jspb.BinaryReader): RemoveUserFromGroupResponse;
+}
+
+export namespace RemoveUserFromGroupResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
diff --git a/cs3/admin/user/v1beta1/user_api_grpc_pb.d.ts b/cs3/admin/user/v1beta1/user_api_grpc_pb.d.ts
new file mode 100644
index 0000000..7e2b58e
--- /dev/null
+++ b/cs3/admin/user/v1beta1/user_api_grpc_pb.d.ts
@@ -0,0 +1,59 @@
+// package: cs3.admin.user.v1beta1
+// file: cs3/admin/user/v1beta1/user_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_admin_user_v1beta1_user_api_pb from '../../../../cs3/admin/user/v1beta1/user_api_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IUserAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  createUser: IUserAPIService_ICreateUser;
+  deleteUser: IUserAPIService_IDeleteUser;
+}
+
+interface IUserAPIService_ICreateUser extends grpc.MethodDefinition<cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest, cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse> {
+  path: '/cs3.admin.user.v1beta1.UserAPI/CreateUser'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest>;
+  requestDeserialize: grpc.deserialize<cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest>;
+  responseSerialize: grpc.serialize<cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse>;
+  responseDeserialize: grpc.deserialize<cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse>;
+}
+
+interface IUserAPIService_IDeleteUser extends grpc.MethodDefinition<cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest, cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse> {
+  path: '/cs3.admin.user.v1beta1.UserAPI/DeleteUser'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest>;
+  requestDeserialize: grpc.deserialize<cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest>;
+  responseSerialize: grpc.serialize<cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse>;
+  responseDeserialize: grpc.deserialize<cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse>;
+}
+
+export const UserAPIService: IUserAPIService;
+export interface IUserAPIServer extends grpc.UntypedServiceImplementation {
+  createUser: grpc.handleUnaryCall<cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest, cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse>;
+  deleteUser: grpc.handleUnaryCall<cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest, cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse>;
+}
+
+export interface IUserAPIClient {
+  createUser(request: cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse) => void): grpc.ClientUnaryCall;
+  createUser(request: cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse) => void): grpc.ClientUnaryCall;
+  createUser(request: cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse) => void): grpc.ClientUnaryCall;
+  deleteUser(request: cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse) => void): grpc.ClientUnaryCall;
+  deleteUser(request: cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse) => void): grpc.ClientUnaryCall;
+  deleteUser(request: cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class UserAPIClient extends grpc.Client implements IUserAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public createUser(request: cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse) => void): grpc.ClientUnaryCall;
+  public createUser(request: cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse) => void): grpc.ClientUnaryCall;
+  public createUser(request: cs3_admin_user_v1beta1_user_api_pb.CreateUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.CreateUserResponse) => void): grpc.ClientUnaryCall;
+  public deleteUser(request: cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse) => void): grpc.ClientUnaryCall;
+  public deleteUser(request: cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse) => void): grpc.ClientUnaryCall;
+  public deleteUser(request: cs3_admin_user_v1beta1_user_api_pb.DeleteUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_admin_user_v1beta1_user_api_pb.DeleteUserResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/admin/user/v1beta1/user_api_grpc_pb.js b/cs3/admin/user/v1beta1/user_api_grpc_pb.js
index 496ba28..5551b28 100644
--- a/cs3/admin/user/v1beta1/user_api_grpc_pb.js
+++ b/cs3/admin/user/v1beta1/user_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_admin_user_v1beta1_user_api_pb = require('../../../../cs3/admin/user/v1beta1/user_api_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
diff --git a/cs3/admin/user/v1beta1/user_api_pb.d.ts b/cs3/admin/user/v1beta1/user_api_pb.d.ts
new file mode 100644
index 0000000..569cd48
--- /dev/null
+++ b/cs3/admin/user/v1beta1/user_api_pb.d.ts
@@ -0,0 +1,126 @@
+// package: cs3.admin.user.v1beta1
+// file: cs3/admin/user/v1beta1/user_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class CreateUserRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasUser(): boolean;
+  clearUser(): void;
+  getUser(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setUser(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateUserRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateUserRequest): CreateUserRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateUserRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateUserRequest;
+  static deserializeBinaryFromReader(message: CreateUserRequest, reader: jspb.BinaryReader): CreateUserRequest;
+}
+
+export namespace CreateUserRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    user?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+  }
+}
+
+export class CreateUserResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasUser(): boolean;
+  clearUser(): void;
+  getUser(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setUser(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateUserResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateUserResponse): CreateUserResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateUserResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateUserResponse;
+  static deserializeBinaryFromReader(message: CreateUserResponse, reader: jspb.BinaryReader): CreateUserResponse;
+}
+
+export namespace CreateUserResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    user?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+  }
+}
+
+export class DeleteUserRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasUserId(): boolean;
+  clearUserId(): void;
+  getUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DeleteUserRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: DeleteUserRequest): DeleteUserRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DeleteUserRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DeleteUserRequest;
+  static deserializeBinaryFromReader(message: DeleteUserRequest, reader: jspb.BinaryReader): DeleteUserRequest;
+}
+
+export namespace DeleteUserRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    userId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+  }
+}
+
+export class DeleteUserResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DeleteUserResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: DeleteUserResponse): DeleteUserResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DeleteUserResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DeleteUserResponse;
+  static deserializeBinaryFromReader(message: DeleteUserResponse, reader: jspb.BinaryReader): DeleteUserResponse;
+}
+
+export namespace DeleteUserResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
diff --git a/cs3/app/provider/v1beta1/provider_api_grpc_pb.d.ts b/cs3/app/provider/v1beta1/provider_api_grpc_pb.d.ts
new file mode 100644
index 0000000..3c9cfca
--- /dev/null
+++ b/cs3/app/provider/v1beta1/provider_api_grpc_pb.d.ts
@@ -0,0 +1,42 @@
+// package: cs3.app.provider.v1beta1
+// file: cs3/app/provider/v1beta1/provider_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_app_provider_v1beta1_provider_api_pb from '../../../../cs3/app/provider/v1beta1/provider_api_pb';
+import * as cs3_app_provider_v1beta1_resources_pb from '../../../../cs3/app/provider/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IProviderAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  openInApp: IProviderAPIService_IOpenInApp;
+}
+
+interface IProviderAPIService_IOpenInApp extends grpc.MethodDefinition<cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest, cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse> {
+  path: '/cs3.app.provider.v1beta1.ProviderAPI/OpenInApp'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest>;
+  responseSerialize: grpc.serialize<cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse>;
+}
+
+export const ProviderAPIService: IProviderAPIService;
+export interface IProviderAPIServer extends grpc.UntypedServiceImplementation {
+  openInApp: grpc.handleUnaryCall<cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest, cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse>;
+}
+
+export interface IProviderAPIClient {
+  openInApp(request: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  openInApp(request: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  openInApp(request: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class ProviderAPIClient extends grpc.Client implements IProviderAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public openInApp(request: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  public openInApp(request: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  public openInApp(request: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/app/provider/v1beta1/provider_api_grpc_pb.js b/cs3/app/provider/v1beta1/provider_api_grpc_pb.js
index 0159139..c545c68 100644
--- a/cs3/app/provider/v1beta1/provider_api_grpc_pb.js
+++ b/cs3/app/provider/v1beta1/provider_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_app_provider_v1beta1_provider_api_pb = require('../../../../cs3/app/provider/v1beta1/provider_api_pb.js');
 var cs3_app_provider_v1beta1_resources_pb = require('../../../../cs3/app/provider/v1beta1/resources_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
diff --git a/cs3/app/provider/v1beta1/provider_api_pb.d.ts b/cs3/app/provider/v1beta1/provider_api_pb.d.ts
new file mode 100644
index 0000000..8bfb123
--- /dev/null
+++ b/cs3/app/provider/v1beta1/provider_api_pb.d.ts
@@ -0,0 +1,86 @@
+// package: cs3.app.provider.v1beta1
+// file: cs3/app/provider/v1beta1/provider_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_app_provider_v1beta1_resources_pb from '../../../../cs3/app/provider/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class OpenInAppRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasResourceInfo(): boolean;
+  clearResourceInfo(): void;
+  getResourceInfo(): cs3_storage_provider_v1beta1_resources_pb.ResourceInfo | undefined;
+  setResourceInfo(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo): void;
+
+  getViewMode(): OpenInAppRequest.ViewMode;
+  setViewMode(value: OpenInAppRequest.ViewMode): void;
+
+  getAccessToken(): string;
+  setAccessToken(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): OpenInAppRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: OpenInAppRequest): OpenInAppRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: OpenInAppRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): OpenInAppRequest;
+  static deserializeBinaryFromReader(message: OpenInAppRequest, reader: jspb.BinaryReader): OpenInAppRequest;
+}
+
+export namespace OpenInAppRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    resourceInfo?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo.AsObject,
+    viewMode: OpenInAppRequest.ViewMode,
+    accessToken: string,
+  }
+
+  export enum ViewMode {
+    VIEW_MODE_INVALID = 0,
+    VIEW_MODE_VIEW_ONLY = 1,
+    VIEW_MODE_READ_ONLY = 2,
+    VIEW_MODE_READ_WRITE = 3,
+  }
+}
+
+export class OpenInAppResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasAppUrl(): boolean;
+  clearAppUrl(): void;
+  getAppUrl(): cs3_app_provider_v1beta1_resources_pb.OpenInAppURL | undefined;
+  setAppUrl(value?: cs3_app_provider_v1beta1_resources_pb.OpenInAppURL): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): OpenInAppResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: OpenInAppResponse): OpenInAppResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: OpenInAppResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): OpenInAppResponse;
+  static deserializeBinaryFromReader(message: OpenInAppResponse, reader: jspb.BinaryReader): OpenInAppResponse;
+}
+
+export namespace OpenInAppResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    appUrl?: cs3_app_provider_v1beta1_resources_pb.OpenInAppURL.AsObject,
+  }
+}
+
diff --git a/cs3/app/provider/v1beta1/resources_pb.d.ts b/cs3/app/provider/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..f4d5501
--- /dev/null
+++ b/cs3/app/provider/v1beta1/resources_pb.d.ts
@@ -0,0 +1,35 @@
+// package: cs3.app.provider.v1beta1
+// file: cs3/app/provider/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+
+export class OpenInAppURL extends jspb.Message {
+  getAppUrl(): string;
+  setAppUrl(value: string): void;
+
+  getMethod(): string;
+  setMethod(value: string): void;
+
+  getFormParametersMap(): jspb.Map<string, string>;
+  clearFormParametersMap(): void;
+  getHeadersMap(): jspb.Map<string, string>;
+  clearHeadersMap(): void;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): OpenInAppURL.AsObject;
+  static toObject(includeInstance: boolean, msg: OpenInAppURL): OpenInAppURL.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: OpenInAppURL, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): OpenInAppURL;
+  static deserializeBinaryFromReader(message: OpenInAppURL, reader: jspb.BinaryReader): OpenInAppURL;
+}
+
+export namespace OpenInAppURL {
+  export type AsObject = {
+    appUrl: string,
+    method: string,
+    formParametersMap: Array<[string, string]>,
+    headersMap: Array<[string, string]>,
+  }
+}
+
diff --git a/cs3/app/registry/v1beta1/registry_api_grpc_pb.d.ts b/cs3/app/registry/v1beta1/registry_api_grpc_pb.d.ts
new file mode 100644
index 0000000..a1c3373
--- /dev/null
+++ b/cs3/app/registry/v1beta1/registry_api_grpc_pb.d.ts
@@ -0,0 +1,132 @@
+// package: cs3.app.registry.v1beta1
+// file: cs3/app/registry/v1beta1/registry_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_app_registry_v1beta1_registry_api_pb from '../../../../cs3/app/registry/v1beta1/registry_api_pb';
+import * as cs3_app_registry_v1beta1_resources_pb from '../../../../cs3/app/registry/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IRegistryAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  getAppProviders: IRegistryAPIService_IGetAppProviders;
+  addAppProvider: IRegistryAPIService_IAddAppProvider;
+  listAppProviders: IRegistryAPIService_IListAppProviders;
+  listSupportedMimeTypes: IRegistryAPIService_IListSupportedMimeTypes;
+  getDefaultAppProviderForMimeType: IRegistryAPIService_IGetDefaultAppProviderForMimeType;
+  setDefaultAppProviderForMimeType: IRegistryAPIService_ISetDefaultAppProviderForMimeType;
+}
+
+interface IRegistryAPIService_IGetAppProviders extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse> {
+  path: '/cs3.app.registry.v1beta1.RegistryAPI/GetAppProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse>;
+}
+
+interface IRegistryAPIService_IAddAppProvider extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse> {
+  path: '/cs3.app.registry.v1beta1.RegistryAPI/AddAppProvider'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse>;
+}
+
+interface IRegistryAPIService_IListAppProviders extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse> {
+  path: '/cs3.app.registry.v1beta1.RegistryAPI/ListAppProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse>;
+}
+
+interface IRegistryAPIService_IListSupportedMimeTypes extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse> {
+  path: '/cs3.app.registry.v1beta1.RegistryAPI/ListSupportedMimeTypes'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse>;
+}
+
+interface IRegistryAPIService_IGetDefaultAppProviderForMimeType extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse> {
+  path: '/cs3.app.registry.v1beta1.RegistryAPI/GetDefaultAppProviderForMimeType'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse>;
+}
+
+interface IRegistryAPIService_ISetDefaultAppProviderForMimeType extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse> {
+  path: '/cs3.app.registry.v1beta1.RegistryAPI/SetDefaultAppProviderForMimeType'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse>;
+}
+
+export const RegistryAPIService: IRegistryAPIService;
+export interface IRegistryAPIServer extends grpc.UntypedServiceImplementation {
+  getAppProviders: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse>;
+  addAppProvider: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse>;
+  listAppProviders: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse>;
+  listSupportedMimeTypes: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse>;
+  getDefaultAppProviderForMimeType: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse>;
+  setDefaultAppProviderForMimeType: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse>;
+}
+
+export interface IRegistryAPIClient {
+  getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class RegistryAPIClient extends grpc.Client implements IRegistryAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  public addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  public addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  public listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  public listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  public listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  public getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/app/registry/v1beta1/registry_api_grpc_pb.js b/cs3/app/registry/v1beta1/registry_api_grpc_pb.js
index e567e85..b267683 100644
--- a/cs3/app/registry/v1beta1/registry_api_grpc_pb.js
+++ b/cs3/app/registry/v1beta1/registry_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_app_registry_v1beta1_registry_api_pb = require('../../../../cs3/app/registry/v1beta1/registry_api_pb.js');
 var cs3_app_registry_v1beta1_resources_pb = require('../../../../cs3/app/registry/v1beta1/resources_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
diff --git a/cs3/app/registry/v1beta1/registry_api_pb.d.ts b/cs3/app/registry/v1beta1/registry_api_pb.d.ts
new file mode 100644
index 0000000..84e3493
--- /dev/null
+++ b/cs3/app/registry/v1beta1/registry_api_pb.d.ts
@@ -0,0 +1,359 @@
+// package: cs3.app.registry.v1beta1
+// file: cs3/app/registry/v1beta1/registry_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_app_registry_v1beta1_resources_pb from '../../../../cs3/app/registry/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class GetAppProvidersRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasResourceInfo(): boolean;
+  clearResourceInfo(): void;
+  getResourceInfo(): cs3_storage_provider_v1beta1_resources_pb.ResourceInfo | undefined;
+  setResourceInfo(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetAppProvidersRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetAppProvidersRequest): GetAppProvidersRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetAppProvidersRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetAppProvidersRequest;
+  static deserializeBinaryFromReader(message: GetAppProvidersRequest, reader: jspb.BinaryReader): GetAppProvidersRequest;
+}
+
+export namespace GetAppProvidersRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    resourceInfo?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo.AsObject,
+  }
+}
+
+export class GetAppProvidersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProvidersList(): void;
+  getProvidersList(): Array<cs3_app_registry_v1beta1_resources_pb.ProviderInfo>;
+  setProvidersList(value: Array<cs3_app_registry_v1beta1_resources_pb.ProviderInfo>): void;
+  addProviders(value?: cs3_app_registry_v1beta1_resources_pb.ProviderInfo, index?: number): cs3_app_registry_v1beta1_resources_pb.ProviderInfo;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetAppProvidersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetAppProvidersResponse): GetAppProvidersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetAppProvidersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetAppProvidersResponse;
+  static deserializeBinaryFromReader(message: GetAppProvidersResponse, reader: jspb.BinaryReader): GetAppProvidersResponse;
+}
+
+export namespace GetAppProvidersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    providersList: Array<cs3_app_registry_v1beta1_resources_pb.ProviderInfo.AsObject>,
+  }
+}
+
+export class AddAppProviderRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasProvider(): boolean;
+  clearProvider(): void;
+  getProvider(): cs3_app_registry_v1beta1_resources_pb.ProviderInfo | undefined;
+  setProvider(value?: cs3_app_registry_v1beta1_resources_pb.ProviderInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AddAppProviderRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: AddAppProviderRequest): AddAppProviderRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AddAppProviderRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AddAppProviderRequest;
+  static deserializeBinaryFromReader(message: AddAppProviderRequest, reader: jspb.BinaryReader): AddAppProviderRequest;
+}
+
+export namespace AddAppProviderRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    provider?: cs3_app_registry_v1beta1_resources_pb.ProviderInfo.AsObject,
+  }
+}
+
+export class AddAppProviderResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AddAppProviderResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: AddAppProviderResponse): AddAppProviderResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AddAppProviderResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AddAppProviderResponse;
+  static deserializeBinaryFromReader(message: AddAppProviderResponse, reader: jspb.BinaryReader): AddAppProviderResponse;
+}
+
+export namespace AddAppProviderResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class ListAppProvidersRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListAppProvidersRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListAppProvidersRequest): ListAppProvidersRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListAppProvidersRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListAppProvidersRequest;
+  static deserializeBinaryFromReader(message: ListAppProvidersRequest, reader: jspb.BinaryReader): ListAppProvidersRequest;
+}
+
+export namespace ListAppProvidersRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class ListAppProvidersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProvidersList(): void;
+  getProvidersList(): Array<cs3_app_registry_v1beta1_resources_pb.ProviderInfo>;
+  setProvidersList(value: Array<cs3_app_registry_v1beta1_resources_pb.ProviderInfo>): void;
+  addProviders(value?: cs3_app_registry_v1beta1_resources_pb.ProviderInfo, index?: number): cs3_app_registry_v1beta1_resources_pb.ProviderInfo;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListAppProvidersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListAppProvidersResponse): ListAppProvidersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListAppProvidersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListAppProvidersResponse;
+  static deserializeBinaryFromReader(message: ListAppProvidersResponse, reader: jspb.BinaryReader): ListAppProvidersResponse;
+}
+
+export namespace ListAppProvidersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    providersList: Array<cs3_app_registry_v1beta1_resources_pb.ProviderInfo.AsObject>,
+  }
+}
+
+export class ListSupportedMimeTypesRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListSupportedMimeTypesRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListSupportedMimeTypesRequest): ListSupportedMimeTypesRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListSupportedMimeTypesRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListSupportedMimeTypesRequest;
+  static deserializeBinaryFromReader(message: ListSupportedMimeTypesRequest, reader: jspb.BinaryReader): ListSupportedMimeTypesRequest;
+}
+
+export namespace ListSupportedMimeTypesRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class ListSupportedMimeTypesResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearMimeTypesList(): void;
+  getMimeTypesList(): Array<cs3_app_registry_v1beta1_resources_pb.MimeTypeInfo>;
+  setMimeTypesList(value: Array<cs3_app_registry_v1beta1_resources_pb.MimeTypeInfo>): void;
+  addMimeTypes(value?: cs3_app_registry_v1beta1_resources_pb.MimeTypeInfo, index?: number): cs3_app_registry_v1beta1_resources_pb.MimeTypeInfo;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListSupportedMimeTypesResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListSupportedMimeTypesResponse): ListSupportedMimeTypesResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListSupportedMimeTypesResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListSupportedMimeTypesResponse;
+  static deserializeBinaryFromReader(message: ListSupportedMimeTypesResponse, reader: jspb.BinaryReader): ListSupportedMimeTypesResponse;
+}
+
+export namespace ListSupportedMimeTypesResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    mimeTypesList: Array<cs3_app_registry_v1beta1_resources_pb.MimeTypeInfo.AsObject>,
+  }
+}
+
+export class GetDefaultAppProviderForMimeTypeRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getMimeType(): string;
+  setMimeType(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetDefaultAppProviderForMimeTypeRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetDefaultAppProviderForMimeTypeRequest): GetDefaultAppProviderForMimeTypeRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetDefaultAppProviderForMimeTypeRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetDefaultAppProviderForMimeTypeRequest;
+  static deserializeBinaryFromReader(message: GetDefaultAppProviderForMimeTypeRequest, reader: jspb.BinaryReader): GetDefaultAppProviderForMimeTypeRequest;
+}
+
+export namespace GetDefaultAppProviderForMimeTypeRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    mimeType: string,
+  }
+}
+
+export class GetDefaultAppProviderForMimeTypeResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasProvider(): boolean;
+  clearProvider(): void;
+  getProvider(): cs3_app_registry_v1beta1_resources_pb.ProviderInfo | undefined;
+  setProvider(value?: cs3_app_registry_v1beta1_resources_pb.ProviderInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetDefaultAppProviderForMimeTypeResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetDefaultAppProviderForMimeTypeResponse): GetDefaultAppProviderForMimeTypeResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetDefaultAppProviderForMimeTypeResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetDefaultAppProviderForMimeTypeResponse;
+  static deserializeBinaryFromReader(message: GetDefaultAppProviderForMimeTypeResponse, reader: jspb.BinaryReader): GetDefaultAppProviderForMimeTypeResponse;
+}
+
+export namespace GetDefaultAppProviderForMimeTypeResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    provider?: cs3_app_registry_v1beta1_resources_pb.ProviderInfo.AsObject,
+  }
+}
+
+export class SetDefaultAppProviderForMimeTypeRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getMimeType(): string;
+  setMimeType(value: string): void;
+
+  hasProvider(): boolean;
+  clearProvider(): void;
+  getProvider(): cs3_app_registry_v1beta1_resources_pb.ProviderInfo | undefined;
+  setProvider(value?: cs3_app_registry_v1beta1_resources_pb.ProviderInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): SetDefaultAppProviderForMimeTypeRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: SetDefaultAppProviderForMimeTypeRequest): SetDefaultAppProviderForMimeTypeRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: SetDefaultAppProviderForMimeTypeRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): SetDefaultAppProviderForMimeTypeRequest;
+  static deserializeBinaryFromReader(message: SetDefaultAppProviderForMimeTypeRequest, reader: jspb.BinaryReader): SetDefaultAppProviderForMimeTypeRequest;
+}
+
+export namespace SetDefaultAppProviderForMimeTypeRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    mimeType: string,
+    provider?: cs3_app_registry_v1beta1_resources_pb.ProviderInfo.AsObject,
+  }
+}
+
+export class SetDefaultAppProviderForMimeTypeResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): SetDefaultAppProviderForMimeTypeResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: SetDefaultAppProviderForMimeTypeResponse): SetDefaultAppProviderForMimeTypeResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: SetDefaultAppProviderForMimeTypeResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): SetDefaultAppProviderForMimeTypeResponse;
+  static deserializeBinaryFromReader(message: SetDefaultAppProviderForMimeTypeResponse, reader: jspb.BinaryReader): SetDefaultAppProviderForMimeTypeResponse;
+}
+
+export namespace SetDefaultAppProviderForMimeTypeResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
diff --git a/cs3/app/registry/v1beta1/resources_pb.d.ts b/cs3/app/registry/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..83ad452
--- /dev/null
+++ b/cs3/app/registry/v1beta1/resources_pb.d.ts
@@ -0,0 +1,116 @@
+// package: cs3.app.registry.v1beta1
+// file: cs3/app/registry/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class ProviderInfo extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearMimeTypesList(): void;
+  getMimeTypesList(): Array<string>;
+  setMimeTypesList(value: Array<string>): void;
+  addMimeTypes(value: string, index?: number): string;
+
+  getAddress(): string;
+  setAddress(value: string): void;
+
+  getCapability(): ProviderInfo.Capability;
+  setCapability(value: ProviderInfo.Capability): void;
+
+  getName(): string;
+  setName(value: string): void;
+
+  getDescription(): string;
+  setDescription(value: string): void;
+
+  getIcon(): string;
+  setIcon(value: string): void;
+
+  getDesktopOnly(): boolean;
+  setDesktopOnly(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ProviderInfo.AsObject;
+  static toObject(includeInstance: boolean, msg: ProviderInfo): ProviderInfo.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ProviderInfo, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ProviderInfo;
+  static deserializeBinaryFromReader(message: ProviderInfo, reader: jspb.BinaryReader): ProviderInfo;
+}
+
+export namespace ProviderInfo {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    mimeTypesList: Array<string>,
+    address: string,
+    capability: ProviderInfo.Capability,
+    name: string,
+    description: string,
+    icon: string,
+    desktopOnly: boolean,
+  }
+
+  export enum Capability {
+    CAPABILITY_INVALID = 0,
+    CAPABILITY_VIEWER = 1,
+    CAPABILITY_EDITOR = 2,
+  }
+}
+
+export class MimeTypeInfo extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getMimeType(): string;
+  setMimeType(value: string): void;
+
+  getExt(): string;
+  setExt(value: string): void;
+
+  clearAppProvidersList(): void;
+  getAppProvidersList(): Array<ProviderInfo>;
+  setAppProvidersList(value: Array<ProviderInfo>): void;
+  addAppProviders(value?: ProviderInfo, index?: number): ProviderInfo;
+
+  getName(): string;
+  setName(value: string): void;
+
+  getDescription(): string;
+  setDescription(value: string): void;
+
+  getIcon(): string;
+  setIcon(value: string): void;
+
+  getAllowCreation(): boolean;
+  setAllowCreation(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): MimeTypeInfo.AsObject;
+  static toObject(includeInstance: boolean, msg: MimeTypeInfo): MimeTypeInfo.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: MimeTypeInfo, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): MimeTypeInfo;
+  static deserializeBinaryFromReader(message: MimeTypeInfo, reader: jspb.BinaryReader): MimeTypeInfo;
+}
+
+export namespace MimeTypeInfo {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    mimeType: string,
+    ext: string,
+    appProvidersList: Array<ProviderInfo.AsObject>,
+    name: string,
+    description: string,
+    icon: string,
+    allowCreation: boolean,
+  }
+}
+
diff --git a/cs3/auth/applications/v1beta1/applications_api_grpc_pb.d.ts b/cs3/auth/applications/v1beta1/applications_api_grpc_pb.d.ts
new file mode 100644
index 0000000..f59c687
--- /dev/null
+++ b/cs3/auth/applications/v1beta1/applications_api_grpc_pb.d.ts
@@ -0,0 +1,97 @@
+// package: cs3.auth.applications.v1beta1
+// file: cs3/auth/applications/v1beta1/applications_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_auth_applications_v1beta1_applications_api_pb from '../../../../cs3/auth/applications/v1beta1/applications_api_pb';
+import * as cs3_auth_applications_v1beta1_resources_pb from '../../../../cs3/auth/applications/v1beta1/resources_pb';
+import * as cs3_auth_provider_v1beta1_resources_pb from '../../../../cs3/auth/provider/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IApplicationsAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  generateAppPassword: IApplicationsAPIService_IGenerateAppPassword;
+  listAppPasswords: IApplicationsAPIService_IListAppPasswords;
+  invalidateAppPassword: IApplicationsAPIService_IInvalidateAppPassword;
+  getAppPassword: IApplicationsAPIService_IGetAppPassword;
+}
+
+interface IApplicationsAPIService_IGenerateAppPassword extends grpc.MethodDefinition<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse> {
+  path: '/cs3.auth.applications.v1beta1.ApplicationsAPI/GenerateAppPassword'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse>;
+}
+
+interface IApplicationsAPIService_IListAppPasswords extends grpc.MethodDefinition<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse> {
+  path: '/cs3.auth.applications.v1beta1.ApplicationsAPI/ListAppPasswords'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse>;
+}
+
+interface IApplicationsAPIService_IInvalidateAppPassword extends grpc.MethodDefinition<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse> {
+  path: '/cs3.auth.applications.v1beta1.ApplicationsAPI/InvalidateAppPassword'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse>;
+}
+
+interface IApplicationsAPIService_IGetAppPassword extends grpc.MethodDefinition<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse> {
+  path: '/cs3.auth.applications.v1beta1.ApplicationsAPI/GetAppPassword'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse>;
+}
+
+export const ApplicationsAPIService: IApplicationsAPIService;
+export interface IApplicationsAPIServer extends grpc.UntypedServiceImplementation {
+  generateAppPassword: grpc.handleUnaryCall<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse>;
+  listAppPasswords: grpc.handleUnaryCall<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse>;
+  invalidateAppPassword: grpc.handleUnaryCall<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse>;
+  getAppPassword: grpc.handleUnaryCall<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse>;
+}
+
+export interface IApplicationsAPIClient {
+  generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class ApplicationsAPIClient extends grpc.Client implements IApplicationsAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  public listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  public listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  public invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/auth/applications/v1beta1/applications_api_grpc_pb.js b/cs3/auth/applications/v1beta1/applications_api_grpc_pb.js
index ab02644..08c8588 100644
--- a/cs3/auth/applications/v1beta1/applications_api_grpc_pb.js
+++ b/cs3/auth/applications/v1beta1/applications_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_auth_applications_v1beta1_applications_api_pb = require('../../../../cs3/auth/applications/v1beta1/applications_api_pb.js');
 var cs3_auth_applications_v1beta1_resources_pb = require('../../../../cs3/auth/applications/v1beta1/resources_pb.js');
 var cs3_auth_provider_v1beta1_resources_pb = require('../../../../cs3/auth/provider/v1beta1/resources_pb.js');
diff --git a/cs3/auth/applications/v1beta1/applications_api_pb.d.ts b/cs3/auth/applications/v1beta1/applications_api_pb.d.ts
new file mode 100644
index 0000000..a0c98a4
--- /dev/null
+++ b/cs3/auth/applications/v1beta1/applications_api_pb.d.ts
@@ -0,0 +1,255 @@
+// package: cs3.auth.applications.v1beta1
+// file: cs3/auth/applications/v1beta1/applications_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_auth_applications_v1beta1_resources_pb from '../../../../cs3/auth/applications/v1beta1/resources_pb';
+import * as cs3_auth_provider_v1beta1_resources_pb from '../../../../cs3/auth/provider/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class GenerateAppPasswordRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getTokenScopeMap(): jspb.Map<string, cs3_auth_provider_v1beta1_resources_pb.Scope>;
+  clearTokenScopeMap(): void;
+  getLabel(): string;
+  setLabel(value: string): void;
+
+  hasExpiration(): boolean;
+  clearExpiration(): void;
+  getExpiration(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setExpiration(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GenerateAppPasswordRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GenerateAppPasswordRequest): GenerateAppPasswordRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GenerateAppPasswordRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GenerateAppPasswordRequest;
+  static deserializeBinaryFromReader(message: GenerateAppPasswordRequest, reader: jspb.BinaryReader): GenerateAppPasswordRequest;
+}
+
+export namespace GenerateAppPasswordRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    tokenScopeMap: Array<[string, cs3_auth_provider_v1beta1_resources_pb.Scope.AsObject]>,
+    label: string,
+    expiration?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
+export class GenerateAppPasswordResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasAppPassword(): boolean;
+  clearAppPassword(): void;
+  getAppPassword(): cs3_auth_applications_v1beta1_resources_pb.AppPassword | undefined;
+  setAppPassword(value?: cs3_auth_applications_v1beta1_resources_pb.AppPassword): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GenerateAppPasswordResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GenerateAppPasswordResponse): GenerateAppPasswordResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GenerateAppPasswordResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GenerateAppPasswordResponse;
+  static deserializeBinaryFromReader(message: GenerateAppPasswordResponse, reader: jspb.BinaryReader): GenerateAppPasswordResponse;
+}
+
+export namespace GenerateAppPasswordResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    appPassword?: cs3_auth_applications_v1beta1_resources_pb.AppPassword.AsObject,
+  }
+}
+
+export class ListAppPasswordsRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListAppPasswordsRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListAppPasswordsRequest): ListAppPasswordsRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListAppPasswordsRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListAppPasswordsRequest;
+  static deserializeBinaryFromReader(message: ListAppPasswordsRequest, reader: jspb.BinaryReader): ListAppPasswordsRequest;
+}
+
+export namespace ListAppPasswordsRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class ListAppPasswordsResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearAppPasswordsList(): void;
+  getAppPasswordsList(): Array<cs3_auth_applications_v1beta1_resources_pb.AppPassword>;
+  setAppPasswordsList(value: Array<cs3_auth_applications_v1beta1_resources_pb.AppPassword>): void;
+  addAppPasswords(value?: cs3_auth_applications_v1beta1_resources_pb.AppPassword, index?: number): cs3_auth_applications_v1beta1_resources_pb.AppPassword;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListAppPasswordsResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListAppPasswordsResponse): ListAppPasswordsResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListAppPasswordsResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListAppPasswordsResponse;
+  static deserializeBinaryFromReader(message: ListAppPasswordsResponse, reader: jspb.BinaryReader): ListAppPasswordsResponse;
+}
+
+export namespace ListAppPasswordsResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    appPasswordsList: Array<cs3_auth_applications_v1beta1_resources_pb.AppPassword.AsObject>,
+  }
+}
+
+export class InvalidateAppPasswordRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getPassword(): string;
+  setPassword(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): InvalidateAppPasswordRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: InvalidateAppPasswordRequest): InvalidateAppPasswordRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: InvalidateAppPasswordRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): InvalidateAppPasswordRequest;
+  static deserializeBinaryFromReader(message: InvalidateAppPasswordRequest, reader: jspb.BinaryReader): InvalidateAppPasswordRequest;
+}
+
+export namespace InvalidateAppPasswordRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    password: string,
+  }
+}
+
+export class InvalidateAppPasswordResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): InvalidateAppPasswordResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: InvalidateAppPasswordResponse): InvalidateAppPasswordResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: InvalidateAppPasswordResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): InvalidateAppPasswordResponse;
+  static deserializeBinaryFromReader(message: InvalidateAppPasswordResponse, reader: jspb.BinaryReader): InvalidateAppPasswordResponse;
+}
+
+export namespace InvalidateAppPasswordResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetAppPasswordRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasUser(): boolean;
+  clearUser(): void;
+  getUser(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUser(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  getPassword(): string;
+  setPassword(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetAppPasswordRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetAppPasswordRequest): GetAppPasswordRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetAppPasswordRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetAppPasswordRequest;
+  static deserializeBinaryFromReader(message: GetAppPasswordRequest, reader: jspb.BinaryReader): GetAppPasswordRequest;
+}
+
+export namespace GetAppPasswordRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    user?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    password: string,
+  }
+}
+
+export class GetAppPasswordResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasAppPassword(): boolean;
+  clearAppPassword(): void;
+  getAppPassword(): cs3_auth_applications_v1beta1_resources_pb.AppPassword | undefined;
+  setAppPassword(value?: cs3_auth_applications_v1beta1_resources_pb.AppPassword): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetAppPasswordResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetAppPasswordResponse): GetAppPasswordResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetAppPasswordResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetAppPasswordResponse;
+  static deserializeBinaryFromReader(message: GetAppPasswordResponse, reader: jspb.BinaryReader): GetAppPasswordResponse;
+}
+
+export namespace GetAppPasswordResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    appPassword?: cs3_auth_applications_v1beta1_resources_pb.AppPassword.AsObject,
+  }
+}
+
diff --git a/cs3/auth/applications/v1beta1/resources_pb.d.ts b/cs3/auth/applications/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..8b84b15
--- /dev/null
+++ b/cs3/auth/applications/v1beta1/resources_pb.d.ts
@@ -0,0 +1,59 @@
+// package: cs3.auth.applications.v1beta1
+// file: cs3/auth/applications/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_auth_provider_v1beta1_resources_pb from '../../../../cs3/auth/provider/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class AppPassword extends jspb.Message {
+  getPassword(): string;
+  setPassword(value: string): void;
+
+  getTokenScopeMap(): jspb.Map<string, cs3_auth_provider_v1beta1_resources_pb.Scope>;
+  clearTokenScopeMap(): void;
+  getLabel(): string;
+  setLabel(value: string): void;
+
+  hasUser(): boolean;
+  clearUser(): void;
+  getUser(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUser(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasExpiration(): boolean;
+  clearExpiration(): void;
+  getExpiration(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setExpiration(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasCtime(): boolean;
+  clearCtime(): void;
+  getCtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setCtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasUtime(): boolean;
+  clearUtime(): void;
+  getUtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setUtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AppPassword.AsObject;
+  static toObject(includeInstance: boolean, msg: AppPassword): AppPassword.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AppPassword, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AppPassword;
+  static deserializeBinaryFromReader(message: AppPassword, reader: jspb.BinaryReader): AppPassword;
+}
+
+export namespace AppPassword {
+  export type AsObject = {
+    password: string,
+    tokenScopeMap: Array<[string, cs3_auth_provider_v1beta1_resources_pb.Scope.AsObject]>,
+    label: string,
+    user?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    expiration?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    ctime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    utime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
diff --git a/cs3/auth/provider/v1beta1/provider_api_grpc_pb.d.ts b/cs3/auth/provider/v1beta1/provider_api_grpc_pb.d.ts
new file mode 100644
index 0000000..7a8c6a0
--- /dev/null
+++ b/cs3/auth/provider/v1beta1/provider_api_grpc_pb.d.ts
@@ -0,0 +1,42 @@
+// package: cs3.auth.provider.v1beta1
+// file: cs3/auth/provider/v1beta1/provider_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_auth_provider_v1beta1_provider_api_pb from '../../../../cs3/auth/provider/v1beta1/provider_api_pb';
+import * as cs3_auth_provider_v1beta1_resources_pb from '../../../../cs3/auth/provider/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IProviderAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  authenticate: IProviderAPIService_IAuthenticate;
+}
+
+interface IProviderAPIService_IAuthenticate extends grpc.MethodDefinition<cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest, cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse> {
+  path: '/cs3.auth.provider.v1beta1.ProviderAPI/Authenticate'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse>;
+}
+
+export const ProviderAPIService: IProviderAPIService;
+export interface IProviderAPIServer extends grpc.UntypedServiceImplementation {
+  authenticate: grpc.handleUnaryCall<cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest, cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse>;
+}
+
+export interface IProviderAPIClient {
+  authenticate(request: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  authenticate(request: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  authenticate(request: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class ProviderAPIClient extends grpc.Client implements IProviderAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public authenticate(request: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  public authenticate(request: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  public authenticate(request: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_provider_v1beta1_provider_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/auth/provider/v1beta1/provider_api_grpc_pb.js b/cs3/auth/provider/v1beta1/provider_api_grpc_pb.js
index 9e92722..69f6b0b 100644
--- a/cs3/auth/provider/v1beta1/provider_api_grpc_pb.js
+++ b/cs3/auth/provider/v1beta1/provider_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_auth_provider_v1beta1_provider_api_pb = require('../../../../cs3/auth/provider/v1beta1/provider_api_pb.js');
 var cs3_auth_provider_v1beta1_resources_pb = require('../../../../cs3/auth/provider/v1beta1/resources_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
diff --git a/cs3/auth/provider/v1beta1/provider_api_pb.d.ts b/cs3/auth/provider/v1beta1/provider_api_pb.d.ts
new file mode 100644
index 0000000..acc10ec
--- /dev/null
+++ b/cs3/auth/provider/v1beta1/provider_api_pb.d.ts
@@ -0,0 +1,70 @@
+// package: cs3.auth.provider.v1beta1
+// file: cs3/auth/provider/v1beta1/provider_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_auth_provider_v1beta1_resources_pb from '../../../../cs3/auth/provider/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class AuthenticateRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getClientId(): string;
+  setClientId(value: string): void;
+
+  getClientSecret(): string;
+  setClientSecret(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AuthenticateRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: AuthenticateRequest): AuthenticateRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AuthenticateRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AuthenticateRequest;
+  static deserializeBinaryFromReader(message: AuthenticateRequest, reader: jspb.BinaryReader): AuthenticateRequest;
+}
+
+export namespace AuthenticateRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    clientId: string,
+    clientSecret: string,
+  }
+}
+
+export class AuthenticateResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasUser(): boolean;
+  clearUser(): void;
+  getUser(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setUser(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  getTokenScopeMap(): jspb.Map<string, cs3_auth_provider_v1beta1_resources_pb.Scope>;
+  clearTokenScopeMap(): void;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AuthenticateResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: AuthenticateResponse): AuthenticateResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AuthenticateResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AuthenticateResponse;
+  static deserializeBinaryFromReader(message: AuthenticateResponse, reader: jspb.BinaryReader): AuthenticateResponse;
+}
+
+export namespace AuthenticateResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    user?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+    tokenScopeMap: Array<[string, cs3_auth_provider_v1beta1_resources_pb.Scope.AsObject]>,
+  }
+}
+
diff --git a/cs3/auth/provider/v1beta1/resources_pb.d.ts b/cs3/auth/provider/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..7a80880
--- /dev/null
+++ b/cs3/auth/provider/v1beta1/resources_pb.d.ts
@@ -0,0 +1,43 @@
+// package: cs3.auth.provider.v1beta1
+// file: cs3/auth/provider/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class Scope extends jspb.Message {
+  hasResource(): boolean;
+  clearResource(): void;
+  getResource(): cs3_types_v1beta1_types_pb.OpaqueEntry | undefined;
+  setResource(value?: cs3_types_v1beta1_types_pb.OpaqueEntry): void;
+
+  getRole(): Role;
+  setRole(value: Role): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Scope.AsObject;
+  static toObject(includeInstance: boolean, msg: Scope): Scope.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Scope, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Scope;
+  static deserializeBinaryFromReader(message: Scope, reader: jspb.BinaryReader): Scope;
+}
+
+export namespace Scope {
+  export type AsObject = {
+    resource?: cs3_types_v1beta1_types_pb.OpaqueEntry.AsObject,
+    role: Role,
+  }
+}
+
+export enum Role {
+  ROLE_INVALID = 0,
+  ROLE_OWNER = 1,
+  ROLE_LEGACY = 2,
+  ROLE_VIEWER = 3,
+  ROLE_EDITOR = 4,
+  ROLE_FILE_EDITOR = 5,
+  ROLE_COOWNER = 6,
+  ROLE_UPLOADER = 7,
+}
+
diff --git a/cs3/auth/registry/v1beta1/registry_api_grpc_pb.d.ts b/cs3/auth/registry/v1beta1/registry_api_grpc_pb.d.ts
new file mode 100644
index 0000000..67f1bbf
--- /dev/null
+++ b/cs3/auth/registry/v1beta1/registry_api_grpc_pb.d.ts
@@ -0,0 +1,59 @@
+// package: cs3.auth.registry.v1beta1
+// file: cs3/auth/registry/v1beta1/registry_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_auth_registry_v1beta1_registry_api_pb from '../../../../cs3/auth/registry/v1beta1/registry_api_pb';
+import * as cs3_auth_registry_v1beta1_resources_pb from '../../../../cs3/auth/registry/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IRegistryAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  getAuthProvider: IRegistryAPIService_IGetAuthProvider;
+  listAuthProviders: IRegistryAPIService_IListAuthProviders;
+}
+
+interface IRegistryAPIService_IGetAuthProvider extends grpc.MethodDefinition<cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest, cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse> {
+  path: '/cs3.auth.registry.v1beta1.RegistryAPI/GetAuthProvider'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse>;
+}
+
+interface IRegistryAPIService_IListAuthProviders extends grpc.MethodDefinition<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse> {
+  path: '/cs3.auth.registry.v1beta1.RegistryAPI/ListAuthProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse>;
+}
+
+export const RegistryAPIService: IRegistryAPIService;
+export interface IRegistryAPIServer extends grpc.UntypedServiceImplementation {
+  getAuthProvider: grpc.handleUnaryCall<cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest, cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse>;
+  listAuthProviders: grpc.handleUnaryCall<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse>;
+}
+
+export interface IRegistryAPIClient {
+  getAuthProvider(request: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse) => void): grpc.ClientUnaryCall;
+  getAuthProvider(request: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse) => void): grpc.ClientUnaryCall;
+  getAuthProvider(request: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse) => void): grpc.ClientUnaryCall;
+  listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class RegistryAPIClient extends grpc.Client implements IRegistryAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public getAuthProvider(request: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse) => void): grpc.ClientUnaryCall;
+  public getAuthProvider(request: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse) => void): grpc.ClientUnaryCall;
+  public getAuthProvider(request: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.GetAuthProviderResponse) => void): grpc.ClientUnaryCall;
+  public listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/auth/registry/v1beta1/registry_api_grpc_pb.js b/cs3/auth/registry/v1beta1/registry_api_grpc_pb.js
index 2bbe4e8..994ac6d 100644
--- a/cs3/auth/registry/v1beta1/registry_api_grpc_pb.js
+++ b/cs3/auth/registry/v1beta1/registry_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_auth_registry_v1beta1_registry_api_pb = require('../../../../cs3/auth/registry/v1beta1/registry_api_pb.js');
 var cs3_auth_registry_v1beta1_resources_pb = require('../../../../cs3/auth/registry/v1beta1/resources_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
diff --git a/cs3/auth/registry/v1beta1/registry_api_pb.d.ts b/cs3/auth/registry/v1beta1/registry_api_pb.d.ts
new file mode 100644
index 0000000..a876557
--- /dev/null
+++ b/cs3/auth/registry/v1beta1/registry_api_pb.d.ts
@@ -0,0 +1,124 @@
+// package: cs3.auth.registry.v1beta1
+// file: cs3/auth/registry/v1beta1/registry_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_auth_registry_v1beta1_resources_pb from '../../../../cs3/auth/registry/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class GetAuthProviderRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getType(): string;
+  setType(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetAuthProviderRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetAuthProviderRequest): GetAuthProviderRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetAuthProviderRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetAuthProviderRequest;
+  static deserializeBinaryFromReader(message: GetAuthProviderRequest, reader: jspb.BinaryReader): GetAuthProviderRequest;
+}
+
+export namespace GetAuthProviderRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    type: string,
+  }
+}
+
+export class GetAuthProviderResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasProvider(): boolean;
+  clearProvider(): void;
+  getProvider(): cs3_auth_registry_v1beta1_resources_pb.ProviderInfo | undefined;
+  setProvider(value?: cs3_auth_registry_v1beta1_resources_pb.ProviderInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetAuthProviderResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetAuthProviderResponse): GetAuthProviderResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetAuthProviderResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetAuthProviderResponse;
+  static deserializeBinaryFromReader(message: GetAuthProviderResponse, reader: jspb.BinaryReader): GetAuthProviderResponse;
+}
+
+export namespace GetAuthProviderResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    provider?: cs3_auth_registry_v1beta1_resources_pb.ProviderInfo.AsObject,
+  }
+}
+
+export class ListAuthProvidersRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListAuthProvidersRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListAuthProvidersRequest): ListAuthProvidersRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListAuthProvidersRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListAuthProvidersRequest;
+  static deserializeBinaryFromReader(message: ListAuthProvidersRequest, reader: jspb.BinaryReader): ListAuthProvidersRequest;
+}
+
+export namespace ListAuthProvidersRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class ListAuthProvidersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProvidersList(): void;
+  getProvidersList(): Array<cs3_auth_registry_v1beta1_resources_pb.ProviderInfo>;
+  setProvidersList(value: Array<cs3_auth_registry_v1beta1_resources_pb.ProviderInfo>): void;
+  addProviders(value?: cs3_auth_registry_v1beta1_resources_pb.ProviderInfo, index?: number): cs3_auth_registry_v1beta1_resources_pb.ProviderInfo;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListAuthProvidersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListAuthProvidersResponse): ListAuthProvidersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListAuthProvidersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListAuthProvidersResponse;
+  static deserializeBinaryFromReader(message: ListAuthProvidersResponse, reader: jspb.BinaryReader): ListAuthProvidersResponse;
+}
+
+export namespace ListAuthProvidersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    providersList: Array<cs3_auth_registry_v1beta1_resources_pb.ProviderInfo.AsObject>,
+  }
+}
+
diff --git a/cs3/auth/registry/v1beta1/resources_pb.d.ts b/cs3/auth/registry/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..0328cb6
--- /dev/null
+++ b/cs3/auth/registry/v1beta1/resources_pb.d.ts
@@ -0,0 +1,40 @@
+// package: cs3.auth.registry.v1beta1
+// file: cs3/auth/registry/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class ProviderInfo extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getProviderType(): string;
+  setProviderType(value: string): void;
+
+  getAddress(): string;
+  setAddress(value: string): void;
+
+  getDescription(): string;
+  setDescription(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ProviderInfo.AsObject;
+  static toObject(includeInstance: boolean, msg: ProviderInfo): ProviderInfo.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ProviderInfo, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ProviderInfo;
+  static deserializeBinaryFromReader(message: ProviderInfo, reader: jspb.BinaryReader): ProviderInfo;
+}
+
+export namespace ProviderInfo {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    providerType: string,
+    address: string,
+    description: string,
+  }
+}
+
diff --git a/cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts b/cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts
new file mode 100644
index 0000000..b08bc3c
--- /dev/null
+++ b/cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts
@@ -0,0 +1,1548 @@
+// package: cs3.gateway.v1beta1
+// file: cs3/gateway/v1beta1/gateway_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_gateway_v1beta1_gateway_api_pb from '../../../cs3/gateway/v1beta1/gateway_api_pb';
+import * as cs3_app_provider_v1beta1_provider_api_pb from '../../../cs3/app/provider/v1beta1/provider_api_pb';
+import * as cs3_app_registry_v1beta1_registry_api_pb from '../../../cs3/app/registry/v1beta1/registry_api_pb';
+import * as cs3_auth_applications_v1beta1_applications_api_pb from '../../../cs3/auth/applications/v1beta1/applications_api_pb';
+import * as cs3_auth_registry_v1beta1_registry_api_pb from '../../../cs3/auth/registry/v1beta1/registry_api_pb';
+import * as cs3_gateway_v1beta1_resources_pb from '../../../cs3/gateway/v1beta1/resources_pb';
+import * as cs3_identity_group_v1beta1_group_api_pb from '../../../cs3/identity/group/v1beta1/group_api_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_user_api_pb from '../../../cs3/identity/user/v1beta1/user_api_pb';
+import * as cs3_ocm_core_v1beta1_ocm_core_api_pb from '../../../cs3/ocm/core/v1beta1/ocm_core_api_pb';
+import * as cs3_ocm_invite_v1beta1_invite_api_pb from '../../../cs3/ocm/invite/v1beta1/invite_api_pb';
+import * as cs3_ocm_provider_v1beta1_provider_api_pb from '../../../cs3/ocm/provider/v1beta1/provider_api_pb';
+import * as cs3_preferences_v1beta1_preferences_api_pb from '../../../cs3/preferences/v1beta1/preferences_api_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_sharing_collaboration_v1beta1_collaboration_api_pb from '../../../cs3/sharing/collaboration/v1beta1/collaboration_api_pb';
+import * as cs3_sharing_link_v1beta1_link_api_pb from '../../../cs3/sharing/link/v1beta1/link_api_pb';
+import * as cs3_sharing_ocm_v1beta1_ocm_api_pb from '../../../cs3/sharing/ocm/v1beta1/ocm_api_pb';
+import * as cs3_storage_provider_v1beta1_provider_api_pb from '../../../cs3/storage/provider/v1beta1/provider_api_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_tx_v1beta1_tx_api_pb from '../../../cs3/tx/v1beta1/tx_api_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../cs3/types/v1beta1/types_pb';
+
+interface IGatewayAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  authenticate: IGatewayAPIService_IAuthenticate;
+  whoAmI: IGatewayAPIService_IWhoAmI;
+  generateAppPassword: IGatewayAPIService_IGenerateAppPassword;
+  listAppPasswords: IGatewayAPIService_IListAppPasswords;
+  invalidateAppPassword: IGatewayAPIService_IInvalidateAppPassword;
+  getAppPassword: IGatewayAPIService_IGetAppPassword;
+  createContainer: IGatewayAPIService_ICreateContainer;
+  delete: IGatewayAPIService_IDelete;
+  getPath: IGatewayAPIService_IGetPath;
+  getQuota: IGatewayAPIService_IGetQuota;
+  initiateFileDownload: IGatewayAPIService_IInitiateFileDownload;
+  initiateFileUpload: IGatewayAPIService_IInitiateFileUpload;
+  listContainerStream: IGatewayAPIService_IListContainerStream;
+  listContainer: IGatewayAPIService_IListContainer;
+  listFileVersions: IGatewayAPIService_IListFileVersions;
+  listRecycleStream: IGatewayAPIService_IListRecycleStream;
+  listRecycle: IGatewayAPIService_IListRecycle;
+  move: IGatewayAPIService_IMove;
+  purgeRecycle: IGatewayAPIService_IPurgeRecycle;
+  restoreFileVersion: IGatewayAPIService_IRestoreFileVersion;
+  restoreRecycleItem: IGatewayAPIService_IRestoreRecycleItem;
+  stat: IGatewayAPIService_IStat;
+  createSymlink: IGatewayAPIService_ICreateSymlink;
+  setArbitraryMetadata: IGatewayAPIService_ISetArbitraryMetadata;
+  unsetArbitraryMetadata: IGatewayAPIService_IUnsetArbitraryMetadata;
+  createHome: IGatewayAPIService_ICreateHome;
+  createStorageSpace: IGatewayAPIService_ICreateStorageSpace;
+  listStorageSpaces: IGatewayAPIService_IListStorageSpaces;
+  updateStorageSpace: IGatewayAPIService_IUpdateStorageSpace;
+  deleteStorageSpace: IGatewayAPIService_IDeleteStorageSpace;
+  openInApp: IGatewayAPIService_IOpenInApp;
+  createShare: IGatewayAPIService_ICreateShare;
+  removeShare: IGatewayAPIService_IRemoveShare;
+  getShare: IGatewayAPIService_IGetShare;
+  listShares: IGatewayAPIService_IListShares;
+  updateShare: IGatewayAPIService_IUpdateShare;
+  listReceivedShares: IGatewayAPIService_IListReceivedShares;
+  updateReceivedShare: IGatewayAPIService_IUpdateReceivedShare;
+  getReceivedShare: IGatewayAPIService_IGetReceivedShare;
+  setKey: IGatewayAPIService_ISetKey;
+  getKey: IGatewayAPIService_IGetKey;
+  createPublicShare: IGatewayAPIService_ICreatePublicShare;
+  removePublicShare: IGatewayAPIService_IRemovePublicShare;
+  getPublicShare: IGatewayAPIService_IGetPublicShare;
+  getPublicShareByToken: IGatewayAPIService_IGetPublicShareByToken;
+  listPublicShares: IGatewayAPIService_IListPublicShares;
+  updatePublicShare: IGatewayAPIService_IUpdatePublicShare;
+  createOCMShare: IGatewayAPIService_ICreateOCMShare;
+  removeOCMShare: IGatewayAPIService_IRemoveOCMShare;
+  getOCMShare: IGatewayAPIService_IGetOCMShare;
+  listOCMShares: IGatewayAPIService_IListOCMShares;
+  updateOCMShare: IGatewayAPIService_IUpdateOCMShare;
+  listReceivedOCMShares: IGatewayAPIService_IListReceivedOCMShares;
+  updateReceivedOCMShare: IGatewayAPIService_IUpdateReceivedOCMShare;
+  getReceivedOCMShare: IGatewayAPIService_IGetReceivedOCMShare;
+  getAppProviders: IGatewayAPIService_IGetAppProviders;
+  addAppProvider: IGatewayAPIService_IAddAppProvider;
+  listAppProviders: IGatewayAPIService_IListAppProviders;
+  listSupportedMimeTypes: IGatewayAPIService_IListSupportedMimeTypes;
+  getDefaultAppProviderForMimeType: IGatewayAPIService_IGetDefaultAppProviderForMimeType;
+  setDefaultAppProviderForMimeType: IGatewayAPIService_ISetDefaultAppProviderForMimeType;
+  getUser: IGatewayAPIService_IGetUser;
+  getUserByClaim: IGatewayAPIService_IGetUserByClaim;
+  getUserGroups: IGatewayAPIService_IGetUserGroups;
+  findUsers: IGatewayAPIService_IFindUsers;
+  getGroup: IGatewayAPIService_IGetGroup;
+  getGroupByClaim: IGatewayAPIService_IGetGroupByClaim;
+  getMembers: IGatewayAPIService_IGetMembers;
+  hasMember: IGatewayAPIService_IHasMember;
+  findGroups: IGatewayAPIService_IFindGroups;
+  listAuthProviders: IGatewayAPIService_IListAuthProviders;
+  getHome: IGatewayAPIService_IGetHome;
+  generateInviteToken: IGatewayAPIService_IGenerateInviteToken;
+  forwardInvite: IGatewayAPIService_IForwardInvite;
+  acceptInvite: IGatewayAPIService_IAcceptInvite;
+  getAcceptedUser: IGatewayAPIService_IGetAcceptedUser;
+  findAcceptedUsers: IGatewayAPIService_IFindAcceptedUsers;
+  isProviderAllowed: IGatewayAPIService_IIsProviderAllowed;
+  getInfoByDomain: IGatewayAPIService_IGetInfoByDomain;
+  listAllProviders: IGatewayAPIService_IListAllProviders;
+  createOCMCoreShare: IGatewayAPIService_ICreateOCMCoreShare;
+  createTransfer: IGatewayAPIService_ICreateTransfer;
+  getTransferStatus: IGatewayAPIService_IGetTransferStatus;
+  cancelTransfer: IGatewayAPIService_ICancelTransfer;
+}
+
+interface IGatewayAPIService_IAuthenticate extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest, cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/Authenticate'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest>;
+  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest>;
+  responseSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse>;
+  responseDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse>;
+}
+
+interface IGatewayAPIService_IWhoAmI extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest, cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/WhoAmI'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest>;
+  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest>;
+  responseSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse>;
+  responseDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse>;
+}
+
+interface IGatewayAPIService_IGenerateAppPassword extends grpc.MethodDefinition<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GenerateAppPassword'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse>;
+}
+
+interface IGatewayAPIService_IListAppPasswords extends grpc.MethodDefinition<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListAppPasswords'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse>;
+}
+
+interface IGatewayAPIService_IInvalidateAppPassword extends grpc.MethodDefinition<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/InvalidateAppPassword'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse>;
+}
+
+interface IGatewayAPIService_IGetAppPassword extends grpc.MethodDefinition<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetAppPassword'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest>;
+  responseSerialize: grpc.serialize<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse>;
+  responseDeserialize: grpc.deserialize<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse>;
+}
+
+interface IGatewayAPIService_ICreateContainer extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CreateContainer'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse>;
+}
+
+interface IGatewayAPIService_IDelete extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/Delete'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse>;
+}
+
+interface IGatewayAPIService_IGetPath extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetPath'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse>;
+}
+
+interface IGatewayAPIService_IGetQuota extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetQuota'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest>;
+  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse>;
+}
+
+interface IGatewayAPIService_IInitiateFileDownload extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/InitiateFileDownload'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest>;
+  responseSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse>;
+  responseDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse>;
+}
+
+interface IGatewayAPIService_IInitiateFileUpload extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/InitiateFileUpload'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest>;
+  responseSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse>;
+  responseDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse>;
+}
+
+interface IGatewayAPIService_IListContainerStream extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListContainerStream'
+  requestStream: false
+  responseStream: true
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+}
+
+interface IGatewayAPIService_IListContainer extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListContainer'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse>;
+}
+
+interface IGatewayAPIService_IListFileVersions extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListFileVersions'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse>;
+}
+
+interface IGatewayAPIService_IListRecycleStream extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListRecycleStream'
+  requestStream: false
+  responseStream: true
+  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest>;
+  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+}
+
+interface IGatewayAPIService_IListRecycle extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListRecycle'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest>;
+  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
+}
+
+interface IGatewayAPIService_IMove extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/Move'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse>;
+}
+
+interface IGatewayAPIService_IPurgeRecycle extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/PurgeRecycle'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest>;
+  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
+}
+
+interface IGatewayAPIService_IRestoreFileVersion extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/RestoreFileVersion'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse>;
+}
+
+interface IGatewayAPIService_IRestoreRecycleItem extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/RestoreRecycleItem'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse>;
+}
+
+interface IGatewayAPIService_IStat extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, cs3_storage_provider_v1beta1_provider_api_pb.StatResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/Stat'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.StatRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.StatRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.StatResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.StatResponse>;
+}
+
+interface IGatewayAPIService_ICreateSymlink extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CreateSymlink'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse>;
+}
+
+interface IGatewayAPIService_ISetArbitraryMetadata extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/SetArbitraryMetadata'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse>;
+}
+
+interface IGatewayAPIService_IUnsetArbitraryMetadata extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/UnsetArbitraryMetadata'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse>;
+}
+
+interface IGatewayAPIService_ICreateHome extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CreateHome'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse>;
+}
+
+interface IGatewayAPIService_ICreateStorageSpace extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CreateStorageSpace'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse>;
+}
+
+interface IGatewayAPIService_IListStorageSpaces extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListStorageSpaces'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse>;
+}
+
+interface IGatewayAPIService_IUpdateStorageSpace extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/UpdateStorageSpace'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse>;
+}
+
+interface IGatewayAPIService_IDeleteStorageSpace extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/DeleteStorageSpace'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse>;
+}
+
+interface IGatewayAPIService_IOpenInApp extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest, cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/OpenInApp'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest>;
+  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest>;
+  responseSerialize: grpc.serialize<cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse>;
+}
+
+interface IGatewayAPIService_ICreateShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CreateShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse>;
+}
+
+interface IGatewayAPIService_IRemoveShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/RemoveShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse>;
+}
+
+interface IGatewayAPIService_IGetShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse>;
+}
+
+interface IGatewayAPIService_IListShares extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse>;
+}
+
+interface IGatewayAPIService_IUpdateShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/UpdateShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse>;
+}
+
+interface IGatewayAPIService_IListReceivedShares extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListReceivedShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse>;
+}
+
+interface IGatewayAPIService_IUpdateReceivedShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/UpdateReceivedShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse>;
+}
+
+interface IGatewayAPIService_IGetReceivedShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetReceivedShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse>;
+}
+
+interface IGatewayAPIService_ISetKey extends grpc.MethodDefinition<cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/SetKey'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest>;
+  requestDeserialize: grpc.deserialize<cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest>;
+  responseSerialize: grpc.serialize<cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse>;
+  responseDeserialize: grpc.deserialize<cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse>;
+}
+
+interface IGatewayAPIService_IGetKey extends grpc.MethodDefinition<cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetKey'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest>;
+  requestDeserialize: grpc.deserialize<cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest>;
+  responseSerialize: grpc.serialize<cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse>;
+  responseDeserialize: grpc.deserialize<cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse>;
+}
+
+interface IGatewayAPIService_ICreatePublicShare extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CreatePublicShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse>;
+}
+
+interface IGatewayAPIService_IRemovePublicShare extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/RemovePublicShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse>;
+}
+
+interface IGatewayAPIService_IGetPublicShare extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetPublicShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse>;
+}
+
+interface IGatewayAPIService_IGetPublicShareByToken extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetPublicShareByToken'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse>;
+}
+
+interface IGatewayAPIService_IListPublicShares extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListPublicShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse>;
+}
+
+interface IGatewayAPIService_IUpdatePublicShare extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/UpdatePublicShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse>;
+}
+
+interface IGatewayAPIService_ICreateOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CreateOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse>;
+}
+
+interface IGatewayAPIService_IRemoveOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/RemoveOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse>;
+}
+
+interface IGatewayAPIService_IGetOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse>;
+}
+
+interface IGatewayAPIService_IListOCMShares extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListOCMShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse>;
+}
+
+interface IGatewayAPIService_IUpdateOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/UpdateOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse>;
+}
+
+interface IGatewayAPIService_IListReceivedOCMShares extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListReceivedOCMShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse>;
+}
+
+interface IGatewayAPIService_IUpdateReceivedOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/UpdateReceivedOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse>;
+}
+
+interface IGatewayAPIService_IGetReceivedOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetReceivedOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse>;
+}
+
+interface IGatewayAPIService_IGetAppProviders extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetAppProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse>;
+}
+
+interface IGatewayAPIService_IAddAppProvider extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/AddAppProvider'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse>;
+}
+
+interface IGatewayAPIService_IListAppProviders extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListAppProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse>;
+}
+
+interface IGatewayAPIService_IListSupportedMimeTypes extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListSupportedMimeTypes'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse>;
+}
+
+interface IGatewayAPIService_IGetDefaultAppProviderForMimeType extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetDefaultAppProviderForMimeType'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse>;
+}
+
+interface IGatewayAPIService_ISetDefaultAppProviderForMimeType extends grpc.MethodDefinition<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/SetDefaultAppProviderForMimeType'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest>;
+  requestDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest>;
+  responseSerialize: grpc.serialize<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse>;
+  responseDeserialize: grpc.deserialize<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse>;
+}
+
+interface IGatewayAPIService_IGetUser extends grpc.MethodDefinition<cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetUser'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserResponse>;
+}
+
+interface IGatewayAPIService_IGetUserByClaim extends grpc.MethodDefinition<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetUserByClaim'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse>;
+}
+
+interface IGatewayAPIService_IGetUserGroups extends grpc.MethodDefinition<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetUserGroups'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse>;
+}
+
+interface IGatewayAPIService_IFindUsers extends grpc.MethodDefinition<cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/FindUsers'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse>;
+}
+
+interface IGatewayAPIService_IGetGroup extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetGroup'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse>;
+}
+
+interface IGatewayAPIService_IGetGroupByClaim extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetGroupByClaim'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse>;
+}
+
+interface IGatewayAPIService_IGetMembers extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetMembers'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse>;
+}
+
+interface IGatewayAPIService_IHasMember extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/HasMember'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse>;
+}
+
+interface IGatewayAPIService_IFindGroups extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/FindGroups'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse>;
+}
+
+interface IGatewayAPIService_IListAuthProviders extends grpc.MethodDefinition<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListAuthProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse>;
+}
+
+interface IGatewayAPIService_IGetHome extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetHome'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse>;
+}
+
+interface IGatewayAPIService_IGenerateInviteToken extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GenerateInviteToken'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse>;
+}
+
+interface IGatewayAPIService_IForwardInvite extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ForwardInvite'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse>;
+}
+
+interface IGatewayAPIService_IAcceptInvite extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/AcceptInvite'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse>;
+}
+
+interface IGatewayAPIService_IGetAcceptedUser extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetAcceptedUser'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse>;
+}
+
+interface IGatewayAPIService_IFindAcceptedUsers extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/FindAcceptedUsers'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse>;
+}
+
+interface IGatewayAPIService_IIsProviderAllowed extends grpc.MethodDefinition<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/IsProviderAllowed'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse>;
+}
+
+interface IGatewayAPIService_IGetInfoByDomain extends grpc.MethodDefinition<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetInfoByDomain'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse>;
+}
+
+interface IGatewayAPIService_IListAllProviders extends grpc.MethodDefinition<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/ListAllProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse>;
+}
+
+interface IGatewayAPIService_ICreateOCMCoreShare extends grpc.MethodDefinition<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CreateOCMCoreShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse>;
+}
+
+interface IGatewayAPIService_ICreateTransfer extends grpc.MethodDefinition<cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CreateTransfer'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest>;
+  requestDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest>;
+  responseSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse>;
+  responseDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse>;
+}
+
+interface IGatewayAPIService_IGetTransferStatus extends grpc.MethodDefinition<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/GetTransferStatus'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest>;
+  requestDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest>;
+  responseSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse>;
+  responseDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse>;
+}
+
+interface IGatewayAPIService_ICancelTransfer extends grpc.MethodDefinition<cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse> {
+  path: '/cs3.gateway.v1beta1.GatewayAPI/CancelTransfer'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest>;
+  requestDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest>;
+  responseSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse>;
+  responseDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse>;
+}
+
+export const GatewayAPIService: IGatewayAPIService;
+export interface IGatewayAPIServer extends grpc.UntypedServiceImplementation {
+  authenticate: grpc.handleUnaryCall<cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest, cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse>;
+  whoAmI: grpc.handleUnaryCall<cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest, cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse>;
+  generateAppPassword: grpc.handleUnaryCall<cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse>;
+  listAppPasswords: grpc.handleUnaryCall<cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse>;
+  invalidateAppPassword: grpc.handleUnaryCall<cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse>;
+  getAppPassword: grpc.handleUnaryCall<cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse>;
+  createContainer: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse>;
+  delete: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse>;
+  getPath: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse>;
+  getQuota: grpc.handleUnaryCall<cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse>;
+  initiateFileDownload: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse>;
+  initiateFileUpload: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse>;
+  listContainerStream: grpc.handleServerStreamingCall<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  listContainer: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse>;
+  listFileVersions: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse>;
+  listRecycleStream: grpc.handleServerStreamingCall<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  listRecycle: grpc.handleUnaryCall<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
+  move: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse>;
+  purgeRecycle: grpc.handleUnaryCall<cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
+  restoreFileVersion: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse>;
+  restoreRecycleItem: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse>;
+  stat: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, cs3_storage_provider_v1beta1_provider_api_pb.StatResponse>;
+  createSymlink: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse>;
+  setArbitraryMetadata: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse>;
+  unsetArbitraryMetadata: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse>;
+  createHome: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse>;
+  createStorageSpace: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse>;
+  listStorageSpaces: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse>;
+  updateStorageSpace: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse>;
+  deleteStorageSpace: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse>;
+  openInApp: grpc.handleUnaryCall<cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest, cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse>;
+  createShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse>;
+  removeShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse>;
+  getShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse>;
+  listShares: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse>;
+  updateShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse>;
+  listReceivedShares: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse>;
+  updateReceivedShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse>;
+  getReceivedShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse>;
+  setKey: grpc.handleUnaryCall<cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse>;
+  getKey: grpc.handleUnaryCall<cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse>;
+  createPublicShare: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse>;
+  removePublicShare: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse>;
+  getPublicShare: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse>;
+  getPublicShareByToken: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse>;
+  listPublicShares: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse>;
+  updatePublicShare: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse>;
+  createOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse>;
+  removeOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse>;
+  getOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse>;
+  listOCMShares: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse>;
+  updateOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse>;
+  listReceivedOCMShares: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse>;
+  updateReceivedOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse>;
+  getReceivedOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse>;
+  getAppProviders: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse>;
+  addAppProvider: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse>;
+  listAppProviders: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse>;
+  listSupportedMimeTypes: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse>;
+  getDefaultAppProviderForMimeType: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse>;
+  setDefaultAppProviderForMimeType: grpc.handleUnaryCall<cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse>;
+  getUser: grpc.handleUnaryCall<cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserResponse>;
+  getUserByClaim: grpc.handleUnaryCall<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse>;
+  getUserGroups: grpc.handleUnaryCall<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse>;
+  findUsers: grpc.handleUnaryCall<cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse>;
+  getGroup: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse>;
+  getGroupByClaim: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse>;
+  getMembers: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse>;
+  hasMember: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse>;
+  findGroups: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse>;
+  listAuthProviders: grpc.handleUnaryCall<cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse>;
+  getHome: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse>;
+  generateInviteToken: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse>;
+  forwardInvite: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse>;
+  acceptInvite: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse>;
+  getAcceptedUser: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse>;
+  findAcceptedUsers: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse>;
+  isProviderAllowed: grpc.handleUnaryCall<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse>;
+  getInfoByDomain: grpc.handleUnaryCall<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse>;
+  listAllProviders: grpc.handleUnaryCall<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse>;
+  createOCMCoreShare: grpc.handleUnaryCall<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse>;
+  createTransfer: grpc.handleUnaryCall<cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse>;
+  getTransferStatus: grpc.handleUnaryCall<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse>;
+  cancelTransfer: grpc.handleUnaryCall<cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse>;
+}
+
+export interface IGatewayAPIClient {
+  authenticate(request: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  authenticate(request: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  authenticate(request: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  whoAmI(request: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse) => void): grpc.ClientUnaryCall;
+  whoAmI(request: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse) => void): grpc.ClientUnaryCall;
+  whoAmI(request: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse) => void): grpc.ClientUnaryCall;
+  generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  getQuota(request: cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  getQuota(request: cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  getQuota(request: cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  listContainerStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  listContainerStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  listRecycleStream(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  listRecycleStream(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  openInApp(request: cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  openInApp(request: cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  openInApp(request: cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+  cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+  cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class GatewayAPIClient extends grpc.Client implements IGatewayAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public authenticate(request: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  public authenticate(request: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  public authenticate(request: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.AuthenticateResponse) => void): grpc.ClientUnaryCall;
+  public whoAmI(request: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse) => void): grpc.ClientUnaryCall;
+  public whoAmI(request: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse) => void): grpc.ClientUnaryCall;
+  public whoAmI(request: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.WhoAmIResponse) => void): grpc.ClientUnaryCall;
+  public generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public generateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GenerateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  public listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  public listAppPasswords(request: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.ListAppPasswordsResponse) => void): grpc.ClientUnaryCall;
+  public invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public invalidateAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.InvalidateAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public getAppPassword(request: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_auth_applications_v1beta1_applications_api_pb.GetAppPasswordResponse) => void): grpc.ClientUnaryCall;
+  public createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  public createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  public createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  public delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  public delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  public delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  public getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  public getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  public getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  public getQuota(request: cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  public getQuota(request: cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  public getQuota(request: cs3_gateway_v1beta1_gateway_api_pb.GetQuotaRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  public listContainerStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  public listContainerStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  public listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  public listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  public listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  public listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  public listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  public listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  public listRecycleStream(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  public listRecycleStream(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  public listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  public listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  public listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  public move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  public move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  public move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  public purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  public purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  public purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  public restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  public restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  public restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  public restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  public restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  public restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  public stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  public stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  public stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  public createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  public createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  public createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  public setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  public createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  public createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  public createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  public listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  public listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  public updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public openInApp(request: cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  public openInApp(request: cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  public openInApp(request: cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_provider_v1beta1_provider_api_pb.OpenInAppResponse) => void): grpc.ClientUnaryCall;
+  public createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  public createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  public createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  public removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  public removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  public removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  public getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  public getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  public getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  public listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  public listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  public listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  public updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  public updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  public updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  public setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  public setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  public getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  public getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  public getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  public createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  public listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  public listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  public listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  public updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public getAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  public addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  public addAppProvider(request: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.AddAppProviderResponse) => void): grpc.ClientUnaryCall;
+  public listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAppProviders(request: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListAppProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  public listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  public listSupportedMimeTypes(request: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.ListSupportedMimeTypesResponse) => void): grpc.ClientUnaryCall;
+  public getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public getDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.GetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public setDefaultAppProviderForMimeType(request: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_app_registry_v1beta1_registry_api_pb.SetDefaultAppProviderForMimeTypeResponse) => void): grpc.ClientUnaryCall;
+  public getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  public getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  public getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  public getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  public getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  public getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  public findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  public findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  public findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  public getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  public getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  public getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  public getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  public getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  public getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  public hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  public hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  public hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  public findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  public findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  public findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  public listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAuthProviders(request: cs3_auth_registry_v1beta1_registry_api_pb.ListAuthProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse) => void): grpc.ClientUnaryCall;
+  public getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  public getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  public getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  public generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  public generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  public generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  public forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  public forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  public forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  public acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  public acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  public acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  public getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  public getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  public getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  public findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  public findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  public findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  public isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  public isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  public isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  public getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  public getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  public getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  public listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  public createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  public createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  public createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  public createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  public createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  public createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  public getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  public getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  public getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  public cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+  public cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+  public cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/gateway/v1beta1/gateway_api_grpc_pb.js b/cs3/gateway/v1beta1/gateway_api_grpc_pb.js
index 47424a4..952c575 100644
--- a/cs3/gateway/v1beta1/gateway_api_grpc_pb.js
+++ b/cs3/gateway/v1beta1/gateway_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_gateway_v1beta1_gateway_api_pb = require('../../../cs3/gateway/v1beta1/gateway_api_pb.js');
 var cs3_app_provider_v1beta1_provider_api_pb = require('../../../cs3/app/provider/v1beta1/provider_api_pb.js');
 var cs3_app_registry_v1beta1_registry_api_pb = require('../../../cs3/app/registry/v1beta1/registry_api_pb.js');
diff --git a/cs3/gateway/v1beta1/gateway_api_pb.d.ts b/cs3/gateway/v1beta1/gateway_api_pb.d.ts
new file mode 100644
index 0000000..8e66e75
--- /dev/null
+++ b/cs3/gateway/v1beta1/gateway_api_pb.d.ts
@@ -0,0 +1,438 @@
+// package: cs3.gateway.v1beta1
+// file: cs3/gateway/v1beta1/gateway_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_app_provider_v1beta1_provider_api_pb from '../../../cs3/app/provider/v1beta1/provider_api_pb';
+import * as cs3_app_registry_v1beta1_registry_api_pb from '../../../cs3/app/registry/v1beta1/registry_api_pb';
+import * as cs3_auth_applications_v1beta1_applications_api_pb from '../../../cs3/auth/applications/v1beta1/applications_api_pb';
+import * as cs3_auth_registry_v1beta1_registry_api_pb from '../../../cs3/auth/registry/v1beta1/registry_api_pb';
+import * as cs3_gateway_v1beta1_resources_pb from '../../../cs3/gateway/v1beta1/resources_pb';
+import * as cs3_identity_group_v1beta1_group_api_pb from '../../../cs3/identity/group/v1beta1/group_api_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_user_api_pb from '../../../cs3/identity/user/v1beta1/user_api_pb';
+import * as cs3_ocm_core_v1beta1_ocm_core_api_pb from '../../../cs3/ocm/core/v1beta1/ocm_core_api_pb';
+import * as cs3_ocm_invite_v1beta1_invite_api_pb from '../../../cs3/ocm/invite/v1beta1/invite_api_pb';
+import * as cs3_ocm_provider_v1beta1_provider_api_pb from '../../../cs3/ocm/provider/v1beta1/provider_api_pb';
+import * as cs3_preferences_v1beta1_preferences_api_pb from '../../../cs3/preferences/v1beta1/preferences_api_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_sharing_collaboration_v1beta1_collaboration_api_pb from '../../../cs3/sharing/collaboration/v1beta1/collaboration_api_pb';
+import * as cs3_sharing_link_v1beta1_link_api_pb from '../../../cs3/sharing/link/v1beta1/link_api_pb';
+import * as cs3_sharing_ocm_v1beta1_ocm_api_pb from '../../../cs3/sharing/ocm/v1beta1/ocm_api_pb';
+import * as cs3_storage_provider_v1beta1_provider_api_pb from '../../../cs3/storage/provider/v1beta1/provider_api_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_tx_v1beta1_tx_api_pb from '../../../cs3/tx/v1beta1/tx_api_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../cs3/types/v1beta1/types_pb';
+
+export class AuthenticateRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getType(): string;
+  setType(value: string): void;
+
+  getClientId(): string;
+  setClientId(value: string): void;
+
+  getClientSecret(): string;
+  setClientSecret(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AuthenticateRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: AuthenticateRequest): AuthenticateRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AuthenticateRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AuthenticateRequest;
+  static deserializeBinaryFromReader(message: AuthenticateRequest, reader: jspb.BinaryReader): AuthenticateRequest;
+}
+
+export namespace AuthenticateRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    type: string,
+    clientId: string,
+    clientSecret: string,
+  }
+}
+
+export class AuthenticateResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getToken(): string;
+  setToken(value: string): void;
+
+  hasUser(): boolean;
+  clearUser(): void;
+  getUser(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setUser(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AuthenticateResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: AuthenticateResponse): AuthenticateResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AuthenticateResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AuthenticateResponse;
+  static deserializeBinaryFromReader(message: AuthenticateResponse, reader: jspb.BinaryReader): AuthenticateResponse;
+}
+
+export namespace AuthenticateResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    token: string,
+    user?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+  }
+}
+
+export class WhoAmIRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getToken(): string;
+  setToken(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): WhoAmIRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: WhoAmIRequest): WhoAmIRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: WhoAmIRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): WhoAmIRequest;
+  static deserializeBinaryFromReader(message: WhoAmIRequest, reader: jspb.BinaryReader): WhoAmIRequest;
+}
+
+export namespace WhoAmIRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    token: string,
+  }
+}
+
+export class WhoAmIResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasUser(): boolean;
+  clearUser(): void;
+  getUser(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setUser(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): WhoAmIResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: WhoAmIResponse): WhoAmIResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: WhoAmIResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): WhoAmIResponse;
+  static deserializeBinaryFromReader(message: WhoAmIResponse, reader: jspb.BinaryReader): WhoAmIResponse;
+}
+
+export namespace WhoAmIResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    user?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+  }
+}
+
+export class GetQuotaRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetQuotaRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetQuotaRequest): GetQuotaRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetQuotaRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetQuotaRequest;
+  static deserializeBinaryFromReader(message: GetQuotaRequest, reader: jspb.BinaryReader): GetQuotaRequest;
+}
+
+export namespace GetQuotaRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class ListRecycleRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasFromTs(): boolean;
+  clearFromTs(): void;
+  getFromTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setFromTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasToTs(): boolean;
+  clearToTs(): void;
+  getToTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setToTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListRecycleRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListRecycleRequest): ListRecycleRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListRecycleRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListRecycleRequest;
+  static deserializeBinaryFromReader(message: ListRecycleRequest, reader: jspb.BinaryReader): ListRecycleRequest;
+}
+
+export namespace ListRecycleRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    fromTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    toTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
+export class ListRecycleStreamRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasFromTs(): boolean;
+  clearFromTs(): void;
+  getFromTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setFromTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasToTs(): boolean;
+  clearToTs(): void;
+  getToTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setToTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListRecycleStreamRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListRecycleStreamRequest): ListRecycleStreamRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListRecycleStreamRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListRecycleStreamRequest;
+  static deserializeBinaryFromReader(message: ListRecycleStreamRequest, reader: jspb.BinaryReader): ListRecycleStreamRequest;
+}
+
+export namespace ListRecycleStreamRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    fromTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    toTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
+export class PurgeRecycleRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): PurgeRecycleRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: PurgeRecycleRequest): PurgeRecycleRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: PurgeRecycleRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): PurgeRecycleRequest;
+  static deserializeBinaryFromReader(message: PurgeRecycleRequest, reader: jspb.BinaryReader): PurgeRecycleRequest;
+}
+
+export namespace PurgeRecycleRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class InitiateFileDownloadResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProtocolsList(): void;
+  getProtocolsList(): Array<cs3_gateway_v1beta1_resources_pb.FileDownloadProtocol>;
+  setProtocolsList(value: Array<cs3_gateway_v1beta1_resources_pb.FileDownloadProtocol>): void;
+  addProtocols(value?: cs3_gateway_v1beta1_resources_pb.FileDownloadProtocol, index?: number): cs3_gateway_v1beta1_resources_pb.FileDownloadProtocol;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): InitiateFileDownloadResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: InitiateFileDownloadResponse): InitiateFileDownloadResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: InitiateFileDownloadResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): InitiateFileDownloadResponse;
+  static deserializeBinaryFromReader(message: InitiateFileDownloadResponse, reader: jspb.BinaryReader): InitiateFileDownloadResponse;
+}
+
+export namespace InitiateFileDownloadResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    protocolsList: Array<cs3_gateway_v1beta1_resources_pb.FileDownloadProtocol.AsObject>,
+  }
+}
+
+export class InitiateFileUploadResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProtocolsList(): void;
+  getProtocolsList(): Array<cs3_gateway_v1beta1_resources_pb.FileUploadProtocol>;
+  setProtocolsList(value: Array<cs3_gateway_v1beta1_resources_pb.FileUploadProtocol>): void;
+  addProtocols(value?: cs3_gateway_v1beta1_resources_pb.FileUploadProtocol, index?: number): cs3_gateway_v1beta1_resources_pb.FileUploadProtocol;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): InitiateFileUploadResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: InitiateFileUploadResponse): InitiateFileUploadResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: InitiateFileUploadResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): InitiateFileUploadResponse;
+  static deserializeBinaryFromReader(message: InitiateFileUploadResponse, reader: jspb.BinaryReader): InitiateFileUploadResponse;
+}
+
+export namespace InitiateFileUploadResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    protocolsList: Array<cs3_gateway_v1beta1_resources_pb.FileUploadProtocol.AsObject>,
+  }
+}
+
+export class ListAuthProvidersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearTypesList(): void;
+  getTypesList(): Array<string>;
+  setTypesList(value: Array<string>): void;
+  addTypes(value: string, index?: number): string;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListAuthProvidersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListAuthProvidersResponse): ListAuthProvidersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListAuthProvidersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListAuthProvidersResponse;
+  static deserializeBinaryFromReader(message: ListAuthProvidersResponse, reader: jspb.BinaryReader): ListAuthProvidersResponse;
+}
+
+export namespace ListAuthProvidersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    typesList: Array<string>,
+  }
+}
+
+export class OpenInAppRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  getViewMode(): OpenInAppRequest.ViewMode;
+  setViewMode(value: OpenInAppRequest.ViewMode): void;
+
+  getApp(): string;
+  setApp(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): OpenInAppRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: OpenInAppRequest): OpenInAppRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: OpenInAppRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): OpenInAppRequest;
+  static deserializeBinaryFromReader(message: OpenInAppRequest, reader: jspb.BinaryReader): OpenInAppRequest;
+}
+
+export namespace OpenInAppRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    viewMode: OpenInAppRequest.ViewMode,
+    app: string,
+  }
+
+  export enum ViewMode {
+    VIEW_MODE_INVALID = 0,
+    VIEW_MODE_VIEW_ONLY = 1,
+    VIEW_MODE_READ_ONLY = 2,
+    VIEW_MODE_READ_WRITE = 3,
+  }
+}
+
diff --git a/cs3/gateway/v1beta1/resources_pb.d.ts b/cs3/gateway/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..462d3e1
--- /dev/null
+++ b/cs3/gateway/v1beta1/resources_pb.d.ts
@@ -0,0 +1,81 @@
+// package: cs3.gateway.v1beta1
+// file: cs3/gateway/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../cs3/types/v1beta1/types_pb';
+
+export class FileUploadProtocol extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getProtocol(): string;
+  setProtocol(value: string): void;
+
+  getUploadEndpoint(): string;
+  setUploadEndpoint(value: string): void;
+
+  clearAvailableChecksumsList(): void;
+  getAvailableChecksumsList(): Array<cs3_storage_provider_v1beta1_resources_pb.ResourceChecksumPriority>;
+  setAvailableChecksumsList(value: Array<cs3_storage_provider_v1beta1_resources_pb.ResourceChecksumPriority>): void;
+  addAvailableChecksums(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceChecksumPriority, index?: number): cs3_storage_provider_v1beta1_resources_pb.ResourceChecksumPriority;
+
+  getToken(): string;
+  setToken(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FileUploadProtocol.AsObject;
+  static toObject(includeInstance: boolean, msg: FileUploadProtocol): FileUploadProtocol.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FileUploadProtocol, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FileUploadProtocol;
+  static deserializeBinaryFromReader(message: FileUploadProtocol, reader: jspb.BinaryReader): FileUploadProtocol;
+}
+
+export namespace FileUploadProtocol {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    protocol: string,
+    uploadEndpoint: string,
+    availableChecksumsList: Array<cs3_storage_provider_v1beta1_resources_pb.ResourceChecksumPriority.AsObject>,
+    token: string,
+  }
+}
+
+export class FileDownloadProtocol extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getProtocol(): string;
+  setProtocol(value: string): void;
+
+  getDownloadEndpoint(): string;
+  setDownloadEndpoint(value: string): void;
+
+  getToken(): string;
+  setToken(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FileDownloadProtocol.AsObject;
+  static toObject(includeInstance: boolean, msg: FileDownloadProtocol): FileDownloadProtocol.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FileDownloadProtocol, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FileDownloadProtocol;
+  static deserializeBinaryFromReader(message: FileDownloadProtocol, reader: jspb.BinaryReader): FileDownloadProtocol;
+}
+
+export namespace FileDownloadProtocol {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    protocol: string,
+    downloadEndpoint: string,
+    token: string,
+  }
+}
+
diff --git a/cs3/identity/group/v1beta1/group_api_grpc_pb.d.ts b/cs3/identity/group/v1beta1/group_api_grpc_pb.d.ts
new file mode 100644
index 0000000..b7ee6fb
--- /dev/null
+++ b/cs3/identity/group/v1beta1/group_api_grpc_pb.d.ts
@@ -0,0 +1,114 @@
+// package: cs3.identity.group.v1beta1
+// file: cs3/identity/group/v1beta1/group_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_identity_group_v1beta1_group_api_pb from '../../../../cs3/identity/group/v1beta1/group_api_pb';
+import * as cs3_identity_group_v1beta1_resources_pb from '../../../../cs3/identity/group/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IGroupAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  getGroup: IGroupAPIService_IGetGroup;
+  getGroupByClaim: IGroupAPIService_IGetGroupByClaim;
+  getMembers: IGroupAPIService_IGetMembers;
+  hasMember: IGroupAPIService_IHasMember;
+  findGroups: IGroupAPIService_IFindGroups;
+}
+
+interface IGroupAPIService_IGetGroup extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse> {
+  path: '/cs3.identity.group.v1beta1.GroupAPI/GetGroup'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse>;
+}
+
+interface IGroupAPIService_IGetGroupByClaim extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse> {
+  path: '/cs3.identity.group.v1beta1.GroupAPI/GetGroupByClaim'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse>;
+}
+
+interface IGroupAPIService_IGetMembers extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse> {
+  path: '/cs3.identity.group.v1beta1.GroupAPI/GetMembers'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse>;
+}
+
+interface IGroupAPIService_IHasMember extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse> {
+  path: '/cs3.identity.group.v1beta1.GroupAPI/HasMember'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse>;
+}
+
+interface IGroupAPIService_IFindGroups extends grpc.MethodDefinition<cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse> {
+  path: '/cs3.identity.group.v1beta1.GroupAPI/FindGroups'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse>;
+}
+
+export const GroupAPIService: IGroupAPIService;
+export interface IGroupAPIServer extends grpc.UntypedServiceImplementation {
+  getGroup: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse>;
+  getGroupByClaim: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse>;
+  getMembers: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse>;
+  hasMember: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse>;
+  findGroups: grpc.handleUnaryCall<cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse>;
+}
+
+export interface IGroupAPIClient {
+  getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class GroupAPIClient extends grpc.Client implements IGroupAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  public getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  public getGroup(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupResponse) => void): grpc.ClientUnaryCall;
+  public getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getGroupByClaim(request: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetGroupByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  public getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  public getMembers(request: cs3_identity_group_v1beta1_group_api_pb.GetMembersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.GetMembersResponse) => void): grpc.ClientUnaryCall;
+  public hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  public hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  public hasMember(request: cs3_identity_group_v1beta1_group_api_pb.HasMemberRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.HasMemberResponse) => void): grpc.ClientUnaryCall;
+  public findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  public findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+  public findGroups(request: cs3_identity_group_v1beta1_group_api_pb.FindGroupsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_group_v1beta1_group_api_pb.FindGroupsResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/identity/group/v1beta1/group_api_grpc_pb.js b/cs3/identity/group/v1beta1/group_api_grpc_pb.js
index 4fd9f44..f9a3264 100644
--- a/cs3/identity/group/v1beta1/group_api_grpc_pb.js
+++ b/cs3/identity/group/v1beta1/group_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_identity_group_v1beta1_group_api_pb = require('../../../../cs3/identity/group/v1beta1/group_api_pb.js');
 var cs3_identity_group_v1beta1_resources_pb = require('../../../../cs3/identity/group/v1beta1/resources_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
diff --git a/cs3/identity/group/v1beta1/group_api_pb.d.ts b/cs3/identity/group/v1beta1/group_api_pb.d.ts
new file mode 100644
index 0000000..d1e9df6
--- /dev/null
+++ b/cs3/identity/group/v1beta1/group_api_pb.d.ts
@@ -0,0 +1,323 @@
+// package: cs3.identity.group.v1beta1
+// file: cs3/identity/group/v1beta1/group_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_group_v1beta1_resources_pb from '../../../../cs3/identity/group/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class GetGroupRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasGroupId(): boolean;
+  clearGroupId(): void;
+  getGroupId(): cs3_identity_group_v1beta1_resources_pb.GroupId | undefined;
+  setGroupId(value?: cs3_identity_group_v1beta1_resources_pb.GroupId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetGroupRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetGroupRequest): GetGroupRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetGroupRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetGroupRequest;
+  static deserializeBinaryFromReader(message: GetGroupRequest, reader: jspb.BinaryReader): GetGroupRequest;
+}
+
+export namespace GetGroupRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    groupId?: cs3_identity_group_v1beta1_resources_pb.GroupId.AsObject,
+  }
+}
+
+export class GetGroupResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasGroup(): boolean;
+  clearGroup(): void;
+  getGroup(): cs3_identity_group_v1beta1_resources_pb.Group | undefined;
+  setGroup(value?: cs3_identity_group_v1beta1_resources_pb.Group): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetGroupResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetGroupResponse): GetGroupResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetGroupResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetGroupResponse;
+  static deserializeBinaryFromReader(message: GetGroupResponse, reader: jspb.BinaryReader): GetGroupResponse;
+}
+
+export namespace GetGroupResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    group?: cs3_identity_group_v1beta1_resources_pb.Group.AsObject,
+  }
+}
+
+export class GetGroupByClaimRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getClaim(): string;
+  setClaim(value: string): void;
+
+  getValue(): string;
+  setValue(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetGroupByClaimRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetGroupByClaimRequest): GetGroupByClaimRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetGroupByClaimRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetGroupByClaimRequest;
+  static deserializeBinaryFromReader(message: GetGroupByClaimRequest, reader: jspb.BinaryReader): GetGroupByClaimRequest;
+}
+
+export namespace GetGroupByClaimRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    claim: string,
+    value: string,
+  }
+}
+
+export class GetGroupByClaimResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasGroup(): boolean;
+  clearGroup(): void;
+  getGroup(): cs3_identity_group_v1beta1_resources_pb.Group | undefined;
+  setGroup(value?: cs3_identity_group_v1beta1_resources_pb.Group): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetGroupByClaimResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetGroupByClaimResponse): GetGroupByClaimResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetGroupByClaimResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetGroupByClaimResponse;
+  static deserializeBinaryFromReader(message: GetGroupByClaimResponse, reader: jspb.BinaryReader): GetGroupByClaimResponse;
+}
+
+export namespace GetGroupByClaimResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    group?: cs3_identity_group_v1beta1_resources_pb.Group.AsObject,
+  }
+}
+
+export class GetMembersRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasGroupId(): boolean;
+  clearGroupId(): void;
+  getGroupId(): cs3_identity_group_v1beta1_resources_pb.GroupId | undefined;
+  setGroupId(value?: cs3_identity_group_v1beta1_resources_pb.GroupId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetMembersRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetMembersRequest): GetMembersRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetMembersRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetMembersRequest;
+  static deserializeBinaryFromReader(message: GetMembersRequest, reader: jspb.BinaryReader): GetMembersRequest;
+}
+
+export namespace GetMembersRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    groupId?: cs3_identity_group_v1beta1_resources_pb.GroupId.AsObject,
+  }
+}
+
+export class GetMembersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearMembersList(): void;
+  getMembersList(): Array<cs3_identity_user_v1beta1_resources_pb.UserId>;
+  setMembersList(value: Array<cs3_identity_user_v1beta1_resources_pb.UserId>): void;
+  addMembers(value?: cs3_identity_user_v1beta1_resources_pb.UserId, index?: number): cs3_identity_user_v1beta1_resources_pb.UserId;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetMembersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetMembersResponse): GetMembersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetMembersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetMembersResponse;
+  static deserializeBinaryFromReader(message: GetMembersResponse, reader: jspb.BinaryReader): GetMembersResponse;
+}
+
+export namespace GetMembersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    membersList: Array<cs3_identity_user_v1beta1_resources_pb.UserId.AsObject>,
+  }
+}
+
+export class HasMemberRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasGroupId(): boolean;
+  clearGroupId(): void;
+  getGroupId(): cs3_identity_group_v1beta1_resources_pb.GroupId | undefined;
+  setGroupId(value?: cs3_identity_group_v1beta1_resources_pb.GroupId): void;
+
+  hasUserId(): boolean;
+  clearUserId(): void;
+  getUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): HasMemberRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: HasMemberRequest): HasMemberRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: HasMemberRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): HasMemberRequest;
+  static deserializeBinaryFromReader(message: HasMemberRequest, reader: jspb.BinaryReader): HasMemberRequest;
+}
+
+export namespace HasMemberRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    groupId?: cs3_identity_group_v1beta1_resources_pb.GroupId.AsObject,
+    userId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+  }
+}
+
+export class HasMemberResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getOk(): boolean;
+  setOk(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): HasMemberResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: HasMemberResponse): HasMemberResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: HasMemberResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): HasMemberResponse;
+  static deserializeBinaryFromReader(message: HasMemberResponse, reader: jspb.BinaryReader): HasMemberResponse;
+}
+
+export namespace HasMemberResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ok: boolean,
+  }
+}
+
+export class FindGroupsRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getFilter(): string;
+  setFilter(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FindGroupsRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: FindGroupsRequest): FindGroupsRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FindGroupsRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FindGroupsRequest;
+  static deserializeBinaryFromReader(message: FindGroupsRequest, reader: jspb.BinaryReader): FindGroupsRequest;
+}
+
+export namespace FindGroupsRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    filter: string,
+  }
+}
+
+export class FindGroupsResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearGroupsList(): void;
+  getGroupsList(): Array<cs3_identity_group_v1beta1_resources_pb.Group>;
+  setGroupsList(value: Array<cs3_identity_group_v1beta1_resources_pb.Group>): void;
+  addGroups(value?: cs3_identity_group_v1beta1_resources_pb.Group, index?: number): cs3_identity_group_v1beta1_resources_pb.Group;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FindGroupsResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: FindGroupsResponse): FindGroupsResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FindGroupsResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FindGroupsResponse;
+  static deserializeBinaryFromReader(message: FindGroupsResponse, reader: jspb.BinaryReader): FindGroupsResponse;
+}
+
+export namespace FindGroupsResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    groupsList: Array<cs3_identity_group_v1beta1_resources_pb.Group.AsObject>,
+  }
+}
+
diff --git a/cs3/identity/group/v1beta1/resources_pb.d.ts b/cs3/identity/group/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..7c764b0
--- /dev/null
+++ b/cs3/identity/group/v1beta1/resources_pb.d.ts
@@ -0,0 +1,85 @@
+// package: cs3.identity.group.v1beta1
+// file: cs3/identity/group/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class GroupId extends jspb.Message {
+  getIdp(): string;
+  setIdp(value: string): void;
+
+  getOpaqueId(): string;
+  setOpaqueId(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GroupId.AsObject;
+  static toObject(includeInstance: boolean, msg: GroupId): GroupId.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GroupId, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GroupId;
+  static deserializeBinaryFromReader(message: GroupId, reader: jspb.BinaryReader): GroupId;
+}
+
+export namespace GroupId {
+  export type AsObject = {
+    idp: string,
+    opaqueId: string,
+  }
+}
+
+export class Group extends jspb.Message {
+  hasId(): boolean;
+  clearId(): void;
+  getId(): GroupId | undefined;
+  setId(value?: GroupId): void;
+
+  getGroupName(): string;
+  setGroupName(value: string): void;
+
+  getGidNumber(): number;
+  setGidNumber(value: number): void;
+
+  getMail(): string;
+  setMail(value: string): void;
+
+  getMailVerified(): boolean;
+  setMailVerified(value: boolean): void;
+
+  getDisplayName(): string;
+  setDisplayName(value: string): void;
+
+  clearMembersList(): void;
+  getMembersList(): Array<cs3_identity_user_v1beta1_resources_pb.UserId>;
+  setMembersList(value: Array<cs3_identity_user_v1beta1_resources_pb.UserId>): void;
+  addMembers(value?: cs3_identity_user_v1beta1_resources_pb.UserId, index?: number): cs3_identity_user_v1beta1_resources_pb.UserId;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Group.AsObject;
+  static toObject(includeInstance: boolean, msg: Group): Group.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Group, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Group;
+  static deserializeBinaryFromReader(message: Group, reader: jspb.BinaryReader): Group;
+}
+
+export namespace Group {
+  export type AsObject = {
+    id?: GroupId.AsObject,
+    groupName: string,
+    gidNumber: number,
+    mail: string,
+    mailVerified: boolean,
+    displayName: string,
+    membersList: Array<cs3_identity_user_v1beta1_resources_pb.UserId.AsObject>,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
diff --git a/cs3/identity/user/v1beta1/resources_pb.d.ts b/cs3/identity/user/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..f84cd82
--- /dev/null
+++ b/cs3/identity/user/v1beta1/resources_pb.d.ts
@@ -0,0 +1,103 @@
+// package: cs3.identity.user.v1beta1
+// file: cs3/identity/user/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class UserId extends jspb.Message {
+  getIdp(): string;
+  setIdp(value: string): void;
+
+  getOpaqueId(): string;
+  setOpaqueId(value: string): void;
+
+  getType(): UserType;
+  setType(value: UserType): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UserId.AsObject;
+  static toObject(includeInstance: boolean, msg: UserId): UserId.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UserId, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UserId;
+  static deserializeBinaryFromReader(message: UserId, reader: jspb.BinaryReader): UserId;
+}
+
+export namespace UserId {
+  export type AsObject = {
+    idp: string,
+    opaqueId: string,
+    type: UserType,
+  }
+}
+
+export class User extends jspb.Message {
+  hasId(): boolean;
+  clearId(): void;
+  getId(): UserId | undefined;
+  setId(value?: UserId): void;
+
+  getUsername(): string;
+  setUsername(value: string): void;
+
+  getMail(): string;
+  setMail(value: string): void;
+
+  getMailVerified(): boolean;
+  setMailVerified(value: boolean): void;
+
+  getDisplayName(): string;
+  setDisplayName(value: string): void;
+
+  clearGroupsList(): void;
+  getGroupsList(): Array<string>;
+  setGroupsList(value: Array<string>): void;
+  addGroups(value: string, index?: number): string;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getUidNumber(): number;
+  setUidNumber(value: number): void;
+
+  getGidNumber(): number;
+  setGidNumber(value: number): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): User.AsObject;
+  static toObject(includeInstance: boolean, msg: User): User.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: User, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): User;
+  static deserializeBinaryFromReader(message: User, reader: jspb.BinaryReader): User;
+}
+
+export namespace User {
+  export type AsObject = {
+    id?: UserId.AsObject,
+    username: string,
+    mail: string,
+    mailVerified: boolean,
+    displayName: string,
+    groupsList: Array<string>,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    uidNumber: number,
+    gidNumber: number,
+  }
+}
+
+export enum UserType {
+  USER_TYPE_INVALID = 0,
+  USER_TYPE_PRIMARY = 1,
+  USER_TYPE_SECONDARY = 2,
+  USER_TYPE_SERVICE = 3,
+  USER_TYPE_APPLICATION = 4,
+  USER_TYPE_GUEST = 5,
+  USER_TYPE_FEDERATED = 6,
+  USER_TYPE_LIGHTWEIGHT = 7,
+}
+
diff --git a/cs3/identity/user/v1beta1/user_api_grpc_pb.d.ts b/cs3/identity/user/v1beta1/user_api_grpc_pb.d.ts
new file mode 100644
index 0000000..ab4468f
--- /dev/null
+++ b/cs3/identity/user/v1beta1/user_api_grpc_pb.d.ts
@@ -0,0 +1,95 @@
+// package: cs3.identity.user.v1beta1
+// file: cs3/identity/user/v1beta1/user_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_identity_user_v1beta1_user_api_pb from '../../../../cs3/identity/user/v1beta1/user_api_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IUserAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  getUser: IUserAPIService_IGetUser;
+  getUserByClaim: IUserAPIService_IGetUserByClaim;
+  getUserGroups: IUserAPIService_IGetUserGroups;
+  findUsers: IUserAPIService_IFindUsers;
+}
+
+interface IUserAPIService_IGetUser extends grpc.MethodDefinition<cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserResponse> {
+  path: '/cs3.identity.user.v1beta1.UserAPI/GetUser'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserResponse>;
+}
+
+interface IUserAPIService_IGetUserByClaim extends grpc.MethodDefinition<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse> {
+  path: '/cs3.identity.user.v1beta1.UserAPI/GetUserByClaim'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse>;
+}
+
+interface IUserAPIService_IGetUserGroups extends grpc.MethodDefinition<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse> {
+  path: '/cs3.identity.user.v1beta1.UserAPI/GetUserGroups'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse>;
+}
+
+interface IUserAPIService_IFindUsers extends grpc.MethodDefinition<cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse> {
+  path: '/cs3.identity.user.v1beta1.UserAPI/FindUsers'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest>;
+  responseSerialize: grpc.serialize<cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse>;
+}
+
+export const UserAPIService: IUserAPIService;
+export interface IUserAPIServer extends grpc.UntypedServiceImplementation {
+  getUser: grpc.handleUnaryCall<cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserResponse>;
+  getUserByClaim: grpc.handleUnaryCall<cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse>;
+  getUserGroups: grpc.handleUnaryCall<cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse>;
+  findUsers: grpc.handleUnaryCall<cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse>;
+}
+
+export interface IUserAPIClient {
+  getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class UserAPIClient extends grpc.Client implements IUserAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  public getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  public getUser(request: cs3_identity_user_v1beta1_user_api_pb.GetUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserResponse) => void): grpc.ClientUnaryCall;
+  public getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getUserByClaim(request: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserByClaimResponse) => void): grpc.ClientUnaryCall;
+  public getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  public getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  public getUserGroups(request: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.GetUserGroupsResponse) => void): grpc.ClientUnaryCall;
+  public findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  public findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+  public findUsers(request: cs3_identity_user_v1beta1_user_api_pb.FindUsersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_identity_user_v1beta1_user_api_pb.FindUsersResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/identity/user/v1beta1/user_api_grpc_pb.js b/cs3/identity/user/v1beta1/user_api_grpc_pb.js
index 483bfd0..a871422 100644
--- a/cs3/identity/user/v1beta1/user_api_grpc_pb.js
+++ b/cs3/identity/user/v1beta1/user_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_identity_user_v1beta1_user_api_pb = require('../../../../cs3/identity/user/v1beta1/user_api_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
diff --git a/cs3/identity/user/v1beta1/user_api_pb.d.ts b/cs3/identity/user/v1beta1/user_api_pb.d.ts
new file mode 100644
index 0000000..dafd00d
--- /dev/null
+++ b/cs3/identity/user/v1beta1/user_api_pb.d.ts
@@ -0,0 +1,256 @@
+// package: cs3.identity.user.v1beta1
+// file: cs3/identity/user/v1beta1/user_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class GetUserRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasUserId(): boolean;
+  clearUserId(): void;
+  getUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetUserRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetUserRequest): GetUserRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetUserRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetUserRequest;
+  static deserializeBinaryFromReader(message: GetUserRequest, reader: jspb.BinaryReader): GetUserRequest;
+}
+
+export namespace GetUserRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    userId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+  }
+}
+
+export class GetUserResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasUser(): boolean;
+  clearUser(): void;
+  getUser(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setUser(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetUserResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetUserResponse): GetUserResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetUserResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetUserResponse;
+  static deserializeBinaryFromReader(message: GetUserResponse, reader: jspb.BinaryReader): GetUserResponse;
+}
+
+export namespace GetUserResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    user?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+  }
+}
+
+export class GetUserByClaimRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getClaim(): string;
+  setClaim(value: string): void;
+
+  getValue(): string;
+  setValue(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetUserByClaimRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetUserByClaimRequest): GetUserByClaimRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetUserByClaimRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetUserByClaimRequest;
+  static deserializeBinaryFromReader(message: GetUserByClaimRequest, reader: jspb.BinaryReader): GetUserByClaimRequest;
+}
+
+export namespace GetUserByClaimRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    claim: string,
+    value: string,
+  }
+}
+
+export class GetUserByClaimResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasUser(): boolean;
+  clearUser(): void;
+  getUser(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setUser(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetUserByClaimResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetUserByClaimResponse): GetUserByClaimResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetUserByClaimResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetUserByClaimResponse;
+  static deserializeBinaryFromReader(message: GetUserByClaimResponse, reader: jspb.BinaryReader): GetUserByClaimResponse;
+}
+
+export namespace GetUserByClaimResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    user?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+  }
+}
+
+export class GetUserGroupsRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasUserId(): boolean;
+  clearUserId(): void;
+  getUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetUserGroupsRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetUserGroupsRequest): GetUserGroupsRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetUserGroupsRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetUserGroupsRequest;
+  static deserializeBinaryFromReader(message: GetUserGroupsRequest, reader: jspb.BinaryReader): GetUserGroupsRequest;
+}
+
+export namespace GetUserGroupsRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    userId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+  }
+}
+
+export class GetUserGroupsResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearGroupsList(): void;
+  getGroupsList(): Array<string>;
+  setGroupsList(value: Array<string>): void;
+  addGroups(value: string, index?: number): string;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetUserGroupsResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetUserGroupsResponse): GetUserGroupsResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetUserGroupsResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetUserGroupsResponse;
+  static deserializeBinaryFromReader(message: GetUserGroupsResponse, reader: jspb.BinaryReader): GetUserGroupsResponse;
+}
+
+export namespace GetUserGroupsResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    groupsList: Array<string>,
+  }
+}
+
+export class FindUsersRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getFilter(): string;
+  setFilter(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FindUsersRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: FindUsersRequest): FindUsersRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FindUsersRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FindUsersRequest;
+  static deserializeBinaryFromReader(message: FindUsersRequest, reader: jspb.BinaryReader): FindUsersRequest;
+}
+
+export namespace FindUsersRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    filter: string,
+  }
+}
+
+export class FindUsersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearUsersList(): void;
+  getUsersList(): Array<cs3_identity_user_v1beta1_resources_pb.User>;
+  setUsersList(value: Array<cs3_identity_user_v1beta1_resources_pb.User>): void;
+  addUsers(value?: cs3_identity_user_v1beta1_resources_pb.User, index?: number): cs3_identity_user_v1beta1_resources_pb.User;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FindUsersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: FindUsersResponse): FindUsersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FindUsersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FindUsersResponse;
+  static deserializeBinaryFromReader(message: FindUsersResponse, reader: jspb.BinaryReader): FindUsersResponse;
+}
+
+export namespace FindUsersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    usersList: Array<cs3_identity_user_v1beta1_resources_pb.User.AsObject>,
+  }
+}
+
diff --git a/cs3/ocm/core/v1beta1/ocm_core_api_grpc_pb.d.ts b/cs3/ocm/core/v1beta1/ocm_core_api_grpc_pb.d.ts
new file mode 100644
index 0000000..a932884
--- /dev/null
+++ b/cs3/ocm/core/v1beta1/ocm_core_api_grpc_pb.d.ts
@@ -0,0 +1,42 @@
+// package: cs3.ocm.core.v1beta1
+// file: cs3/ocm/core/v1beta1/ocm_core_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_ocm_core_v1beta1_ocm_core_api_pb from '../../../../cs3/ocm/core/v1beta1/ocm_core_api_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_ocm_core_v1beta1_resources_pb from '../../../../cs3/ocm/core/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IOcmCoreAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  createOCMCoreShare: IOcmCoreAPIService_ICreateOCMCoreShare;
+}
+
+interface IOcmCoreAPIService_ICreateOCMCoreShare extends grpc.MethodDefinition<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse> {
+  path: '/cs3.ocm.core.v1beta1.OcmCoreAPI/CreateOCMCoreShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse>;
+}
+
+export const OcmCoreAPIService: IOcmCoreAPIService;
+export interface IOcmCoreAPIServer extends grpc.UntypedServiceImplementation {
+  createOCMCoreShare: grpc.handleUnaryCall<cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse>;
+}
+
+export interface IOcmCoreAPIClient {
+  createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class OcmCoreAPIClient extends grpc.Client implements IOcmCoreAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  public createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+  public createOCMCoreShare(request: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_core_v1beta1_ocm_core_api_pb.CreateOCMCoreShareResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/ocm/core/v1beta1/ocm_core_api_grpc_pb.js b/cs3/ocm/core/v1beta1/ocm_core_api_grpc_pb.js
index b1f0634..9dc6f6d 100644
--- a/cs3/ocm/core/v1beta1/ocm_core_api_grpc_pb.js
+++ b/cs3/ocm/core/v1beta1/ocm_core_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_ocm_core_v1beta1_ocm_core_api_pb = require('../../../../cs3/ocm/core/v1beta1/ocm_core_api_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
 var cs3_ocm_core_v1beta1_resources_pb = require('../../../../cs3/ocm/core/v1beta1/resources_pb.js');
diff --git a/cs3/ocm/core/v1beta1/ocm_core_api_pb.d.ts b/cs3/ocm/core/v1beta1/ocm_core_api_pb.d.ts
new file mode 100644
index 0000000..98f80c8
--- /dev/null
+++ b/cs3/ocm/core/v1beta1/ocm_core_api_pb.d.ts
@@ -0,0 +1,99 @@
+// package: cs3.ocm.core.v1beta1
+// file: cs3/ocm/core/v1beta1/ocm_core_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_ocm_core_v1beta1_resources_pb from '../../../../cs3/ocm/core/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class CreateOCMCoreShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getDescription(): string;
+  setDescription(value: string): void;
+
+  getName(): string;
+  setName(value: string): void;
+
+  getProviderId(): string;
+  setProviderId(value: string): void;
+
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasShareWith(): boolean;
+  clearShareWith(): void;
+  getShareWith(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setShareWith(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasProtocol(): boolean;
+  clearProtocol(): void;
+  getProtocol(): cs3_ocm_core_v1beta1_resources_pb.Protocol | undefined;
+  setProtocol(value?: cs3_ocm_core_v1beta1_resources_pb.Protocol): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateOCMCoreShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateOCMCoreShareRequest): CreateOCMCoreShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateOCMCoreShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateOCMCoreShareRequest;
+  static deserializeBinaryFromReader(message: CreateOCMCoreShareRequest, reader: jspb.BinaryReader): CreateOCMCoreShareRequest;
+}
+
+export namespace CreateOCMCoreShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    description: string,
+    name: string,
+    providerId: string,
+    owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    shareWith?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    protocol?: cs3_ocm_core_v1beta1_resources_pb.Protocol.AsObject,
+  }
+}
+
+export class CreateOCMCoreShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getId(): string;
+  setId(value: string): void;
+
+  hasCreated(): boolean;
+  clearCreated(): void;
+  getCreated(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setCreated(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateOCMCoreShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateOCMCoreShareResponse): CreateOCMCoreShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateOCMCoreShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateOCMCoreShareResponse;
+  static deserializeBinaryFromReader(message: CreateOCMCoreShareResponse, reader: jspb.BinaryReader): CreateOCMCoreShareResponse;
+}
+
+export namespace CreateOCMCoreShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    id: string,
+    created?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
diff --git a/cs3/ocm/core/v1beta1/resources_pb.d.ts b/cs3/ocm/core/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..0589464
--- /dev/null
+++ b/cs3/ocm/core/v1beta1/resources_pb.d.ts
@@ -0,0 +1,32 @@
+// package: cs3.ocm.core.v1beta1
+// file: cs3/ocm/core/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class Protocol extends jspb.Message {
+  getName(): string;
+  setName(value: string): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Protocol.AsObject;
+  static toObject(includeInstance: boolean, msg: Protocol): Protocol.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Protocol, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Protocol;
+  static deserializeBinaryFromReader(message: Protocol, reader: jspb.BinaryReader): Protocol;
+}
+
+export namespace Protocol {
+  export type AsObject = {
+    name: string,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
diff --git a/cs3/ocm/invite/v1beta1/invite_api_grpc_pb.d.ts b/cs3/ocm/invite/v1beta1/invite_api_grpc_pb.d.ts
new file mode 100644
index 0000000..5213773
--- /dev/null
+++ b/cs3/ocm/invite/v1beta1/invite_api_grpc_pb.d.ts
@@ -0,0 +1,115 @@
+// package: cs3.ocm.invite.v1beta1
+// file: cs3/ocm/invite/v1beta1/invite_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_ocm_invite_v1beta1_invite_api_pb from '../../../../cs3/ocm/invite/v1beta1/invite_api_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_ocm_invite_v1beta1_resources_pb from '../../../../cs3/ocm/invite/v1beta1/resources_pb';
+import * as cs3_ocm_provider_v1beta1_resources_pb from '../../../../cs3/ocm/provider/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IInviteAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  generateInviteToken: IInviteAPIService_IGenerateInviteToken;
+  forwardInvite: IInviteAPIService_IForwardInvite;
+  acceptInvite: IInviteAPIService_IAcceptInvite;
+  getAcceptedUser: IInviteAPIService_IGetAcceptedUser;
+  findAcceptedUsers: IInviteAPIService_IFindAcceptedUsers;
+}
+
+interface IInviteAPIService_IGenerateInviteToken extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse> {
+  path: '/cs3.ocm.invite.v1beta1.InviteAPI/GenerateInviteToken'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse>;
+}
+
+interface IInviteAPIService_IForwardInvite extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse> {
+  path: '/cs3.ocm.invite.v1beta1.InviteAPI/ForwardInvite'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse>;
+}
+
+interface IInviteAPIService_IAcceptInvite extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse> {
+  path: '/cs3.ocm.invite.v1beta1.InviteAPI/AcceptInvite'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse>;
+}
+
+interface IInviteAPIService_IGetAcceptedUser extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse> {
+  path: '/cs3.ocm.invite.v1beta1.InviteAPI/GetAcceptedUser'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse>;
+}
+
+interface IInviteAPIService_IFindAcceptedUsers extends grpc.MethodDefinition<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse> {
+  path: '/cs3.ocm.invite.v1beta1.InviteAPI/FindAcceptedUsers'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse>;
+}
+
+export const InviteAPIService: IInviteAPIService;
+export interface IInviteAPIServer extends grpc.UntypedServiceImplementation {
+  generateInviteToken: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse>;
+  forwardInvite: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse>;
+  acceptInvite: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse>;
+  getAcceptedUser: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse>;
+  findAcceptedUsers: grpc.handleUnaryCall<cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse>;
+}
+
+export interface IInviteAPIClient {
+  generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class InviteAPIClient extends grpc.Client implements IInviteAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  public generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  public generateInviteToken(request: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GenerateInviteTokenResponse) => void): grpc.ClientUnaryCall;
+  public forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  public forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  public forwardInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.ForwardInviteResponse) => void): grpc.ClientUnaryCall;
+  public acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  public acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  public acceptInvite(request: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.AcceptInviteResponse) => void): grpc.ClientUnaryCall;
+  public getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  public getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  public getAcceptedUser(request: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.GetAcceptedUserResponse) => void): grpc.ClientUnaryCall;
+  public findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  public findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+  public findAcceptedUsers(request: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_invite_v1beta1_invite_api_pb.FindAcceptedUsersResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/ocm/invite/v1beta1/invite_api_grpc_pb.js b/cs3/ocm/invite/v1beta1/invite_api_grpc_pb.js
index ed22833..89355e9 100644
--- a/cs3/ocm/invite/v1beta1/invite_api_grpc_pb.js
+++ b/cs3/ocm/invite/v1beta1/invite_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_ocm_invite_v1beta1_invite_api_pb = require('../../../../cs3/ocm/invite/v1beta1/invite_api_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
 var cs3_ocm_invite_v1beta1_resources_pb = require('../../../../cs3/ocm/invite/v1beta1/resources_pb.js');
diff --git a/cs3/ocm/invite/v1beta1/invite_api_pb.d.ts b/cs3/ocm/invite/v1beta1/invite_api_pb.d.ts
new file mode 100644
index 0000000..e52ed23
--- /dev/null
+++ b/cs3/ocm/invite/v1beta1/invite_api_pb.d.ts
@@ -0,0 +1,312 @@
+// package: cs3.ocm.invite.v1beta1
+// file: cs3/ocm/invite/v1beta1/invite_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_ocm_invite_v1beta1_resources_pb from '../../../../cs3/ocm/invite/v1beta1/resources_pb';
+import * as cs3_ocm_provider_v1beta1_resources_pb from '../../../../cs3/ocm/provider/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class GenerateInviteTokenRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GenerateInviteTokenRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GenerateInviteTokenRequest): GenerateInviteTokenRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GenerateInviteTokenRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GenerateInviteTokenRequest;
+  static deserializeBinaryFromReader(message: GenerateInviteTokenRequest, reader: jspb.BinaryReader): GenerateInviteTokenRequest;
+}
+
+export namespace GenerateInviteTokenRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GenerateInviteTokenResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasInviteToken(): boolean;
+  clearInviteToken(): void;
+  getInviteToken(): cs3_ocm_invite_v1beta1_resources_pb.InviteToken | undefined;
+  setInviteToken(value?: cs3_ocm_invite_v1beta1_resources_pb.InviteToken): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GenerateInviteTokenResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GenerateInviteTokenResponse): GenerateInviteTokenResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GenerateInviteTokenResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GenerateInviteTokenResponse;
+  static deserializeBinaryFromReader(message: GenerateInviteTokenResponse, reader: jspb.BinaryReader): GenerateInviteTokenResponse;
+}
+
+export namespace GenerateInviteTokenResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    inviteToken?: cs3_ocm_invite_v1beta1_resources_pb.InviteToken.AsObject,
+  }
+}
+
+export class ForwardInviteRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasInviteToken(): boolean;
+  clearInviteToken(): void;
+  getInviteToken(): cs3_ocm_invite_v1beta1_resources_pb.InviteToken | undefined;
+  setInviteToken(value?: cs3_ocm_invite_v1beta1_resources_pb.InviteToken): void;
+
+  hasOriginSystemProvider(): boolean;
+  clearOriginSystemProvider(): void;
+  getOriginSystemProvider(): cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo | undefined;
+  setOriginSystemProvider(value?: cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ForwardInviteRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ForwardInviteRequest): ForwardInviteRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ForwardInviteRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ForwardInviteRequest;
+  static deserializeBinaryFromReader(message: ForwardInviteRequest, reader: jspb.BinaryReader): ForwardInviteRequest;
+}
+
+export namespace ForwardInviteRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    inviteToken?: cs3_ocm_invite_v1beta1_resources_pb.InviteToken.AsObject,
+    originSystemProvider?: cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo.AsObject,
+  }
+}
+
+export class ForwardInviteResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ForwardInviteResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ForwardInviteResponse): ForwardInviteResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ForwardInviteResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ForwardInviteResponse;
+  static deserializeBinaryFromReader(message: ForwardInviteResponse, reader: jspb.BinaryReader): ForwardInviteResponse;
+}
+
+export namespace ForwardInviteResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class AcceptInviteRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasInviteToken(): boolean;
+  clearInviteToken(): void;
+  getInviteToken(): cs3_ocm_invite_v1beta1_resources_pb.InviteToken | undefined;
+  setInviteToken(value?: cs3_ocm_invite_v1beta1_resources_pb.InviteToken): void;
+
+  hasRemoteUser(): boolean;
+  clearRemoteUser(): void;
+  getRemoteUser(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setRemoteUser(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AcceptInviteRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: AcceptInviteRequest): AcceptInviteRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AcceptInviteRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AcceptInviteRequest;
+  static deserializeBinaryFromReader(message: AcceptInviteRequest, reader: jspb.BinaryReader): AcceptInviteRequest;
+}
+
+export namespace AcceptInviteRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    inviteToken?: cs3_ocm_invite_v1beta1_resources_pb.InviteToken.AsObject,
+    remoteUser?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+  }
+}
+
+export class AcceptInviteResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AcceptInviteResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: AcceptInviteResponse): AcceptInviteResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AcceptInviteResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AcceptInviteResponse;
+  static deserializeBinaryFromReader(message: AcceptInviteResponse, reader: jspb.BinaryReader): AcceptInviteResponse;
+}
+
+export namespace AcceptInviteResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetAcceptedUserRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRemoteUserId(): boolean;
+  clearRemoteUserId(): void;
+  getRemoteUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setRemoteUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetAcceptedUserRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetAcceptedUserRequest): GetAcceptedUserRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetAcceptedUserRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetAcceptedUserRequest;
+  static deserializeBinaryFromReader(message: GetAcceptedUserRequest, reader: jspb.BinaryReader): GetAcceptedUserRequest;
+}
+
+export namespace GetAcceptedUserRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    remoteUserId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+  }
+}
+
+export class GetAcceptedUserResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRemoteUser(): boolean;
+  clearRemoteUser(): void;
+  getRemoteUser(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setRemoteUser(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetAcceptedUserResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetAcceptedUserResponse): GetAcceptedUserResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetAcceptedUserResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetAcceptedUserResponse;
+  static deserializeBinaryFromReader(message: GetAcceptedUserResponse, reader: jspb.BinaryReader): GetAcceptedUserResponse;
+}
+
+export namespace GetAcceptedUserResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    remoteUser?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+  }
+}
+
+export class FindAcceptedUsersRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getFilter(): string;
+  setFilter(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FindAcceptedUsersRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: FindAcceptedUsersRequest): FindAcceptedUsersRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FindAcceptedUsersRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FindAcceptedUsersRequest;
+  static deserializeBinaryFromReader(message: FindAcceptedUsersRequest, reader: jspb.BinaryReader): FindAcceptedUsersRequest;
+}
+
+export namespace FindAcceptedUsersRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    filter: string,
+  }
+}
+
+export class FindAcceptedUsersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearAcceptedUsersList(): void;
+  getAcceptedUsersList(): Array<cs3_identity_user_v1beta1_resources_pb.User>;
+  setAcceptedUsersList(value: Array<cs3_identity_user_v1beta1_resources_pb.User>): void;
+  addAcceptedUsers(value?: cs3_identity_user_v1beta1_resources_pb.User, index?: number): cs3_identity_user_v1beta1_resources_pb.User;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FindAcceptedUsersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: FindAcceptedUsersResponse): FindAcceptedUsersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FindAcceptedUsersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FindAcceptedUsersResponse;
+  static deserializeBinaryFromReader(message: FindAcceptedUsersResponse, reader: jspb.BinaryReader): FindAcceptedUsersResponse;
+}
+
+export namespace FindAcceptedUsersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    acceptedUsersList: Array<cs3_identity_user_v1beta1_resources_pb.User.AsObject>,
+  }
+}
+
diff --git a/cs3/ocm/invite/v1beta1/resources_pb.d.ts b/cs3/ocm/invite/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..c1b97ee
--- /dev/null
+++ b/cs3/ocm/invite/v1beta1/resources_pb.d.ts
@@ -0,0 +1,43 @@
+// package: cs3.ocm.invite.v1beta1
+// file: cs3/ocm/invite/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class InviteToken extends jspb.Message {
+  getToken(): string;
+  setToken(value: string): void;
+
+  hasUserId(): boolean;
+  clearUserId(): void;
+  getUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasExpiration(): boolean;
+  clearExpiration(): void;
+  getExpiration(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setExpiration(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  getDescription(): string;
+  setDescription(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): InviteToken.AsObject;
+  static toObject(includeInstance: boolean, msg: InviteToken): InviteToken.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: InviteToken, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): InviteToken;
+  static deserializeBinaryFromReader(message: InviteToken, reader: jspb.BinaryReader): InviteToken;
+}
+
+export namespace InviteToken {
+  export type AsObject = {
+    token: string,
+    userId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    expiration?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    description: string,
+  }
+}
+
diff --git a/cs3/ocm/provider/v1beta1/provider_api_grpc_pb.d.ts b/cs3/ocm/provider/v1beta1/provider_api_grpc_pb.d.ts
new file mode 100644
index 0000000..8b9054b
--- /dev/null
+++ b/cs3/ocm/provider/v1beta1/provider_api_grpc_pb.d.ts
@@ -0,0 +1,77 @@
+// package: cs3.ocm.provider.v1beta1
+// file: cs3/ocm/provider/v1beta1/provider_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_ocm_provider_v1beta1_provider_api_pb from '../../../../cs3/ocm/provider/v1beta1/provider_api_pb';
+import * as cs3_ocm_provider_v1beta1_resources_pb from '../../../../cs3/ocm/provider/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IProviderAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  isProviderAllowed: IProviderAPIService_IIsProviderAllowed;
+  getInfoByDomain: IProviderAPIService_IGetInfoByDomain;
+  listAllProviders: IProviderAPIService_IListAllProviders;
+}
+
+interface IProviderAPIService_IIsProviderAllowed extends grpc.MethodDefinition<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse> {
+  path: '/cs3.ocm.provider.v1beta1.ProviderAPI/IsProviderAllowed'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse>;
+}
+
+interface IProviderAPIService_IGetInfoByDomain extends grpc.MethodDefinition<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse> {
+  path: '/cs3.ocm.provider.v1beta1.ProviderAPI/GetInfoByDomain'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse>;
+}
+
+interface IProviderAPIService_IListAllProviders extends grpc.MethodDefinition<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse> {
+  path: '/cs3.ocm.provider.v1beta1.ProviderAPI/ListAllProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse>;
+}
+
+export const ProviderAPIService: IProviderAPIService;
+export interface IProviderAPIServer extends grpc.UntypedServiceImplementation {
+  isProviderAllowed: grpc.handleUnaryCall<cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse>;
+  getInfoByDomain: grpc.handleUnaryCall<cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse>;
+  listAllProviders: grpc.handleUnaryCall<cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse>;
+}
+
+export interface IProviderAPIClient {
+  isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class ProviderAPIClient extends grpc.Client implements IProviderAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  public isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  public isProviderAllowed(request: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.IsProviderAllowedResponse) => void): grpc.ClientUnaryCall;
+  public getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  public getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  public getInfoByDomain(request: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.GetInfoByDomainResponse) => void): grpc.ClientUnaryCall;
+  public listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listAllProviders(request: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_ocm_provider_v1beta1_provider_api_pb.ListAllProvidersResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/ocm/provider/v1beta1/provider_api_grpc_pb.js b/cs3/ocm/provider/v1beta1/provider_api_grpc_pb.js
index 8daa70c..a86e0b5 100644
--- a/cs3/ocm/provider/v1beta1/provider_api_grpc_pb.js
+++ b/cs3/ocm/provider/v1beta1/provider_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_ocm_provider_v1beta1_provider_api_pb = require('../../../../cs3/ocm/provider/v1beta1/provider_api_pb.js');
 var cs3_ocm_provider_v1beta1_resources_pb = require('../../../../cs3/ocm/provider/v1beta1/resources_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
diff --git a/cs3/ocm/provider/v1beta1/provider_api_pb.d.ts b/cs3/ocm/provider/v1beta1/provider_api_pb.d.ts
new file mode 100644
index 0000000..c0b3084
--- /dev/null
+++ b/cs3/ocm/provider/v1beta1/provider_api_pb.d.ts
@@ -0,0 +1,180 @@
+// package: cs3.ocm.provider.v1beta1
+// file: cs3/ocm/provider/v1beta1/provider_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_ocm_provider_v1beta1_resources_pb from '../../../../cs3/ocm/provider/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class IsProviderAllowedRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasProvider(): boolean;
+  clearProvider(): void;
+  getProvider(): cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo | undefined;
+  setProvider(value?: cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): IsProviderAllowedRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: IsProviderAllowedRequest): IsProviderAllowedRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: IsProviderAllowedRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): IsProviderAllowedRequest;
+  static deserializeBinaryFromReader(message: IsProviderAllowedRequest, reader: jspb.BinaryReader): IsProviderAllowedRequest;
+}
+
+export namespace IsProviderAllowedRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    provider?: cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo.AsObject,
+  }
+}
+
+export class IsProviderAllowedResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): IsProviderAllowedResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: IsProviderAllowedResponse): IsProviderAllowedResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: IsProviderAllowedResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): IsProviderAllowedResponse;
+  static deserializeBinaryFromReader(message: IsProviderAllowedResponse, reader: jspb.BinaryReader): IsProviderAllowedResponse;
+}
+
+export namespace IsProviderAllowedResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetInfoByDomainRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getDomain(): string;
+  setDomain(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetInfoByDomainRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetInfoByDomainRequest): GetInfoByDomainRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetInfoByDomainRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetInfoByDomainRequest;
+  static deserializeBinaryFromReader(message: GetInfoByDomainRequest, reader: jspb.BinaryReader): GetInfoByDomainRequest;
+}
+
+export namespace GetInfoByDomainRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    domain: string,
+  }
+}
+
+export class GetInfoByDomainResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasProviderInfo(): boolean;
+  clearProviderInfo(): void;
+  getProviderInfo(): cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo | undefined;
+  setProviderInfo(value?: cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetInfoByDomainResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetInfoByDomainResponse): GetInfoByDomainResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetInfoByDomainResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetInfoByDomainResponse;
+  static deserializeBinaryFromReader(message: GetInfoByDomainResponse, reader: jspb.BinaryReader): GetInfoByDomainResponse;
+}
+
+export namespace GetInfoByDomainResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    providerInfo?: cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo.AsObject,
+  }
+}
+
+export class ListAllProvidersRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListAllProvidersRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListAllProvidersRequest): ListAllProvidersRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListAllProvidersRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListAllProvidersRequest;
+  static deserializeBinaryFromReader(message: ListAllProvidersRequest, reader: jspb.BinaryReader): ListAllProvidersRequest;
+}
+
+export namespace ListAllProvidersRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class ListAllProvidersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProvidersList(): void;
+  getProvidersList(): Array<cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo>;
+  setProvidersList(value: Array<cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo>): void;
+  addProviders(value?: cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo, index?: number): cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListAllProvidersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListAllProvidersResponse): ListAllProvidersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListAllProvidersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListAllProvidersResponse;
+  static deserializeBinaryFromReader(message: ListAllProvidersResponse, reader: jspb.BinaryReader): ListAllProvidersResponse;
+}
+
+export namespace ListAllProvidersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    providersList: Array<cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo.AsObject>,
+  }
+}
+
diff --git a/cs3/ocm/provider/v1beta1/resources_pb.d.ts b/cs3/ocm/provider/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..43a199e
--- /dev/null
+++ b/cs3/ocm/provider/v1beta1/resources_pb.d.ts
@@ -0,0 +1,155 @@
+// package: cs3.ocm.provider.v1beta1
+// file: cs3/ocm/provider/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+
+export class ServiceType extends jspb.Message {
+  getName(): string;
+  setName(value: string): void;
+
+  getDescription(): string;
+  setDescription(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ServiceType.AsObject;
+  static toObject(includeInstance: boolean, msg: ServiceType): ServiceType.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ServiceType, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ServiceType;
+  static deserializeBinaryFromReader(message: ServiceType, reader: jspb.BinaryReader): ServiceType;
+}
+
+export namespace ServiceType {
+  export type AsObject = {
+    name: string,
+    description: string,
+  }
+}
+
+export class ServiceEndpoint extends jspb.Message {
+  hasType(): boolean;
+  clearType(): void;
+  getType(): ServiceType | undefined;
+  setType(value?: ServiceType): void;
+
+  getName(): string;
+  setName(value: string): void;
+
+  getPath(): string;
+  setPath(value: string): void;
+
+  getIsMonitored(): boolean;
+  setIsMonitored(value: boolean): void;
+
+  getPropertiesMap(): jspb.Map<string, string>;
+  clearPropertiesMap(): void;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ServiceEndpoint.AsObject;
+  static toObject(includeInstance: boolean, msg: ServiceEndpoint): ServiceEndpoint.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ServiceEndpoint, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ServiceEndpoint;
+  static deserializeBinaryFromReader(message: ServiceEndpoint, reader: jspb.BinaryReader): ServiceEndpoint;
+}
+
+export namespace ServiceEndpoint {
+  export type AsObject = {
+    type?: ServiceType.AsObject,
+    name: string,
+    path: string,
+    isMonitored: boolean,
+    propertiesMap: Array<[string, string]>,
+  }
+}
+
+export class Service extends jspb.Message {
+  getHost(): string;
+  setHost(value: string): void;
+
+  hasEndpoint(): boolean;
+  clearEndpoint(): void;
+  getEndpoint(): ServiceEndpoint | undefined;
+  setEndpoint(value?: ServiceEndpoint): void;
+
+  getApiVersion(): string;
+  setApiVersion(value: string): void;
+
+  clearAdditionalEndpointsList(): void;
+  getAdditionalEndpointsList(): Array<ServiceEndpoint>;
+  setAdditionalEndpointsList(value: Array<ServiceEndpoint>): void;
+  addAdditionalEndpoints(value?: ServiceEndpoint, index?: number): ServiceEndpoint;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Service.AsObject;
+  static toObject(includeInstance: boolean, msg: Service): Service.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Service, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Service;
+  static deserializeBinaryFromReader(message: Service, reader: jspb.BinaryReader): Service;
+}
+
+export namespace Service {
+  export type AsObject = {
+    host: string,
+    endpoint?: ServiceEndpoint.AsObject,
+    apiVersion: string,
+    additionalEndpointsList: Array<ServiceEndpoint.AsObject>,
+  }
+}
+
+export class ProviderInfo extends jspb.Message {
+  getName(): string;
+  setName(value: string): void;
+
+  getFullName(): string;
+  setFullName(value: string): void;
+
+  getDescription(): string;
+  setDescription(value: string): void;
+
+  getOrganization(): string;
+  setOrganization(value: string): void;
+
+  getDomain(): string;
+  setDomain(value: string): void;
+
+  getHomepage(): string;
+  setHomepage(value: string): void;
+
+  getEmail(): string;
+  setEmail(value: string): void;
+
+  clearServicesList(): void;
+  getServicesList(): Array<Service>;
+  setServicesList(value: Array<Service>): void;
+  addServices(value?: Service, index?: number): Service;
+
+  getPropertiesMap(): jspb.Map<string, string>;
+  clearPropertiesMap(): void;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ProviderInfo.AsObject;
+  static toObject(includeInstance: boolean, msg: ProviderInfo): ProviderInfo.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ProviderInfo, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ProviderInfo;
+  static deserializeBinaryFromReader(message: ProviderInfo, reader: jspb.BinaryReader): ProviderInfo;
+}
+
+export namespace ProviderInfo {
+  export type AsObject = {
+    name: string,
+    fullName: string,
+    description: string,
+    organization: string,
+    domain: string,
+    homepage: string,
+    email: string,
+    servicesList: Array<Service.AsObject>,
+    propertiesMap: Array<[string, string]>,
+  }
+}
+
diff --git a/cs3/preferences/v1beta1/preferences_api_grpc_pb.d.ts b/cs3/preferences/v1beta1/preferences_api_grpc_pb.d.ts
new file mode 100644
index 0000000..5f24dcc
--- /dev/null
+++ b/cs3/preferences/v1beta1/preferences_api_grpc_pb.d.ts
@@ -0,0 +1,57 @@
+// package: cs3.preferences.v1beta1
+// file: cs3/preferences/v1beta1/preferences_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_preferences_v1beta1_preferences_api_pb from '../../../cs3/preferences/v1beta1/preferences_api_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../cs3/rpc/v1beta1/status_pb';
+
+interface IPreferencesAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  setKey: IPreferencesAPIService_ISetKey;
+  getKey: IPreferencesAPIService_IGetKey;
+}
+
+interface IPreferencesAPIService_ISetKey extends grpc.MethodDefinition<cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse> {
+  path: '/cs3.preferences.v1beta1.PreferencesAPI/SetKey'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest>;
+  requestDeserialize: grpc.deserialize<cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest>;
+  responseSerialize: grpc.serialize<cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse>;
+  responseDeserialize: grpc.deserialize<cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse>;
+}
+
+interface IPreferencesAPIService_IGetKey extends grpc.MethodDefinition<cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse> {
+  path: '/cs3.preferences.v1beta1.PreferencesAPI/GetKey'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest>;
+  requestDeserialize: grpc.deserialize<cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest>;
+  responseSerialize: grpc.serialize<cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse>;
+  responseDeserialize: grpc.deserialize<cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse>;
+}
+
+export const PreferencesAPIService: IPreferencesAPIService;
+export interface IPreferencesAPIServer extends grpc.UntypedServiceImplementation {
+  setKey: grpc.handleUnaryCall<cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse>;
+  getKey: grpc.handleUnaryCall<cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse>;
+}
+
+export interface IPreferencesAPIClient {
+  setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class PreferencesAPIClient extends grpc.Client implements IPreferencesAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  public setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  public setKey(request: cs3_preferences_v1beta1_preferences_api_pb.SetKeyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.SetKeyResponse) => void): grpc.ClientUnaryCall;
+  public getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  public getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+  public getKey(request: cs3_preferences_v1beta1_preferences_api_pb.GetKeyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_preferences_v1beta1_preferences_api_pb.GetKeyResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/preferences/v1beta1/preferences_api_grpc_pb.js b/cs3/preferences/v1beta1/preferences_api_grpc_pb.js
index 6042d1a..6acce53 100644
--- a/cs3/preferences/v1beta1/preferences_api_grpc_pb.js
+++ b/cs3/preferences/v1beta1/preferences_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_preferences_v1beta1_preferences_api_pb = require('../../../cs3/preferences/v1beta1/preferences_api_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../cs3/rpc/v1beta1/status_pb.js');
 
diff --git a/cs3/preferences/v1beta1/preferences_api_pb.d.ts b/cs3/preferences/v1beta1/preferences_api_pb.d.ts
new file mode 100644
index 0000000..ed80264
--- /dev/null
+++ b/cs3/preferences/v1beta1/preferences_api_pb.d.ts
@@ -0,0 +1,98 @@
+// package: cs3.preferences.v1beta1
+// file: cs3/preferences/v1beta1/preferences_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_rpc_v1beta1_status_pb from '../../../cs3/rpc/v1beta1/status_pb';
+
+export class SetKeyRequest extends jspb.Message {
+  getKey(): string;
+  setKey(value: string): void;
+
+  getVal(): string;
+  setVal(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): SetKeyRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: SetKeyRequest): SetKeyRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: SetKeyRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): SetKeyRequest;
+  static deserializeBinaryFromReader(message: SetKeyRequest, reader: jspb.BinaryReader): SetKeyRequest;
+}
+
+export namespace SetKeyRequest {
+  export type AsObject = {
+    key: string,
+    val: string,
+  }
+}
+
+export class SetKeyResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): SetKeyResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: SetKeyResponse): SetKeyResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: SetKeyResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): SetKeyResponse;
+  static deserializeBinaryFromReader(message: SetKeyResponse, reader: jspb.BinaryReader): SetKeyResponse;
+}
+
+export namespace SetKeyResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+  }
+}
+
+export class GetKeyRequest extends jspb.Message {
+  getKey(): string;
+  setKey(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetKeyRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetKeyRequest): GetKeyRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetKeyRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetKeyRequest;
+  static deserializeBinaryFromReader(message: GetKeyRequest, reader: jspb.BinaryReader): GetKeyRequest;
+}
+
+export namespace GetKeyRequest {
+  export type AsObject = {
+    key: string,
+  }
+}
+
+export class GetKeyResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  getVal(): string;
+  setVal(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetKeyResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetKeyResponse): GetKeyResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetKeyResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetKeyResponse;
+  static deserializeBinaryFromReader(message: GetKeyResponse, reader: jspb.BinaryReader): GetKeyResponse;
+}
+
+export namespace GetKeyResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    val: string,
+  }
+}
+
diff --git a/cs3/rpc/v1beta1/code_pb.d.ts b/cs3/rpc/v1beta1/code_pb.d.ts
new file mode 100644
index 0000000..cd83088
--- /dev/null
+++ b/cs3/rpc/v1beta1/code_pb.d.ts
@@ -0,0 +1,28 @@
+// package: cs3.rpc.v1beta1
+// file: cs3/rpc/v1beta1/code.proto
+
+import * as jspb from 'google-protobuf';
+
+export enum Code {
+  CODE_INVALID = 0,
+  CODE_OK = 1,
+  CODE_CANCELLED = 2,
+  CODE_UNKNOWN = 3,
+  CODE_INVALID_ARGUMENT = 4,
+  CODE_DEADLINE_EXCEEDED = 5,
+  CODE_NOT_FOUND = 6,
+  CODE_ALREADY_EXISTS = 7,
+  CODE_PERMISSION_DENIED = 8,
+  CODE_UNAUTHENTICATED = 9,
+  CODE_RESOURCE_EXHAUSTED = 10,
+  CODE_FAILED_PRECONDITION = 11,
+  CODE_ABORTED = 12,
+  CODE_OUT_OF_RANGE = 13,
+  CODE_UNIMPLEMENTED = 14,
+  CODE_INTERNAL = 15,
+  CODE_UNAVAILABLE = 16,
+  CODE_DATA_LOSS = 17,
+  CODE_REDIRECTION = 18,
+  CODE_INSUFFICIENT_STORAGE = 19,
+}
+
diff --git a/cs3/rpc/v1beta1/status_pb.d.ts b/cs3/rpc/v1beta1/status_pb.d.ts
new file mode 100644
index 0000000..98c658a
--- /dev/null
+++ b/cs3/rpc/v1beta1/status_pb.d.ts
@@ -0,0 +1,38 @@
+// package: cs3.rpc.v1beta1
+// file: cs3/rpc/v1beta1/status.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_rpc_v1beta1_code_pb from '../../../cs3/rpc/v1beta1/code_pb';
+
+export class Status extends jspb.Message {
+  getCode(): cs3_rpc_v1beta1_code_pb.Code;
+  setCode(value: cs3_rpc_v1beta1_code_pb.Code): void;
+
+  getMessage(): string;
+  setMessage(value: string): void;
+
+  getTrace(): string;
+  setTrace(value: string): void;
+
+  getTargetUri(): string;
+  setTargetUri(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Status.AsObject;
+  static toObject(includeInstance: boolean, msg: Status): Status.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Status, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Status;
+  static deserializeBinaryFromReader(message: Status, reader: jspb.BinaryReader): Status;
+}
+
+export namespace Status {
+  export type AsObject = {
+    code: cs3_rpc_v1beta1_code_pb.Code,
+    message: string,
+    trace: string,
+    targetUri: string,
+  }
+}
+
diff --git a/cs3/sharing/collaboration/v1beta1/collaboration_api_grpc_pb.d.ts b/cs3/sharing/collaboration/v1beta1/collaboration_api_grpc_pb.d.ts
new file mode 100644
index 0000000..6fd88f4
--- /dev/null
+++ b/cs3/sharing/collaboration/v1beta1/collaboration_api_grpc_pb.d.ts
@@ -0,0 +1,169 @@
+// package: cs3.sharing.collaboration.v1beta1
+// file: cs3/sharing/collaboration/v1beta1/collaboration_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_sharing_collaboration_v1beta1_collaboration_api_pb from '../../../../cs3/sharing/collaboration/v1beta1/collaboration_api_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_sharing_collaboration_v1beta1_resources_pb from '../../../../cs3/sharing/collaboration/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+import * as google_protobuf_field_mask_pb from 'google-protobuf/google/protobuf/field_mask_pb';
+
+interface ICollaborationAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  createShare: ICollaborationAPIService_ICreateShare;
+  removeShare: ICollaborationAPIService_IRemoveShare;
+  getShare: ICollaborationAPIService_IGetShare;
+  listShares: ICollaborationAPIService_IListShares;
+  updateShare: ICollaborationAPIService_IUpdateShare;
+  listReceivedShares: ICollaborationAPIService_IListReceivedShares;
+  updateReceivedShare: ICollaborationAPIService_IUpdateReceivedShare;
+  getReceivedShare: ICollaborationAPIService_IGetReceivedShare;
+}
+
+interface ICollaborationAPIService_ICreateShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse> {
+  path: '/cs3.sharing.collaboration.v1beta1.CollaborationAPI/CreateShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse>;
+}
+
+interface ICollaborationAPIService_IRemoveShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse> {
+  path: '/cs3.sharing.collaboration.v1beta1.CollaborationAPI/RemoveShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse>;
+}
+
+interface ICollaborationAPIService_IGetShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse> {
+  path: '/cs3.sharing.collaboration.v1beta1.CollaborationAPI/GetShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse>;
+}
+
+interface ICollaborationAPIService_IListShares extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse> {
+  path: '/cs3.sharing.collaboration.v1beta1.CollaborationAPI/ListShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse>;
+}
+
+interface ICollaborationAPIService_IUpdateShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse> {
+  path: '/cs3.sharing.collaboration.v1beta1.CollaborationAPI/UpdateShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse>;
+}
+
+interface ICollaborationAPIService_IListReceivedShares extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse> {
+  path: '/cs3.sharing.collaboration.v1beta1.CollaborationAPI/ListReceivedShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse>;
+}
+
+interface ICollaborationAPIService_IUpdateReceivedShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse> {
+  path: '/cs3.sharing.collaboration.v1beta1.CollaborationAPI/UpdateReceivedShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse>;
+}
+
+interface ICollaborationAPIService_IGetReceivedShare extends grpc.MethodDefinition<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse> {
+  path: '/cs3.sharing.collaboration.v1beta1.CollaborationAPI/GetReceivedShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse>;
+}
+
+export const CollaborationAPIService: ICollaborationAPIService;
+export interface ICollaborationAPIServer extends grpc.UntypedServiceImplementation {
+  createShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse>;
+  removeShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse>;
+  getShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse>;
+  listShares: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse>;
+  updateShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse>;
+  listReceivedShares: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse>;
+  updateReceivedShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse>;
+  getReceivedShare: grpc.handleUnaryCall<cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse>;
+}
+
+export interface ICollaborationAPIClient {
+  createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class CollaborationAPIClient extends grpc.Client implements ICollaborationAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  public createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  public createShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.CreateShareResponse) => void): grpc.ClientUnaryCall;
+  public removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  public removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  public removeShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.RemoveShareResponse) => void): grpc.ClientUnaryCall;
+  public getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  public getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  public getShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetShareResponse) => void): grpc.ClientUnaryCall;
+  public listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  public listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  public listShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListSharesResponse) => void): grpc.ClientUnaryCall;
+  public updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  public updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  public updateShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateShareResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedShares(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.ListReceivedSharesResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.UpdateReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedShare(request: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_collaboration_v1beta1_collaboration_api_pb.GetReceivedShareResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/sharing/collaboration/v1beta1/collaboration_api_grpc_pb.js b/cs3/sharing/collaboration/v1beta1/collaboration_api_grpc_pb.js
index ffee718..e2b2e67 100644
--- a/cs3/sharing/collaboration/v1beta1/collaboration_api_grpc_pb.js
+++ b/cs3/sharing/collaboration/v1beta1/collaboration_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_sharing_collaboration_v1beta1_collaboration_api_pb = require('../../../../cs3/sharing/collaboration/v1beta1/collaboration_api_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
 var cs3_sharing_collaboration_v1beta1_resources_pb = require('../../../../cs3/sharing/collaboration/v1beta1/resources_pb.js');
diff --git a/cs3/sharing/collaboration/v1beta1/collaboration_api_pb.d.ts b/cs3/sharing/collaboration/v1beta1/collaboration_api_pb.d.ts
new file mode 100644
index 0000000..3f046bd
--- /dev/null
+++ b/cs3/sharing/collaboration/v1beta1/collaboration_api_pb.d.ts
@@ -0,0 +1,553 @@
+// package: cs3.sharing.collaboration.v1beta1
+// file: cs3/sharing/collaboration/v1beta1/collaboration_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_sharing_collaboration_v1beta1_resources_pb from '../../../../cs3/sharing/collaboration/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+import * as google_protobuf_field_mask_pb from 'google-protobuf/google/protobuf/field_mask_pb';
+
+export class CreateShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasResourceInfo(): boolean;
+  clearResourceInfo(): void;
+  getResourceInfo(): cs3_storage_provider_v1beta1_resources_pb.ResourceInfo | undefined;
+  setResourceInfo(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo): void;
+
+  hasGrant(): boolean;
+  clearGrant(): void;
+  getGrant(): cs3_sharing_collaboration_v1beta1_resources_pb.ShareGrant | undefined;
+  setGrant(value?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareGrant): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateShareRequest): CreateShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateShareRequest;
+  static deserializeBinaryFromReader(message: CreateShareRequest, reader: jspb.BinaryReader): CreateShareRequest;
+}
+
+export namespace CreateShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    resourceInfo?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo.AsObject,
+    grant?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareGrant.AsObject,
+  }
+}
+
+export class CreateShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_collaboration_v1beta1_resources_pb.Share | undefined;
+  setShare(value?: cs3_sharing_collaboration_v1beta1_resources_pb.Share): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateShareResponse): CreateShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateShareResponse;
+  static deserializeBinaryFromReader(message: CreateShareResponse, reader: jspb.BinaryReader): CreateShareResponse;
+}
+
+export namespace CreateShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_collaboration_v1beta1_resources_pb.Share.AsObject,
+  }
+}
+
+export class UpdateShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference | undefined;
+  setRef(value?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference): void;
+
+  hasField(): boolean;
+  clearField(): void;
+  getField(): UpdateShareRequest.UpdateField | undefined;
+  setField(value?: UpdateShareRequest.UpdateField): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateShareRequest): UpdateShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateShareRequest;
+  static deserializeBinaryFromReader(message: UpdateShareRequest, reader: jspb.BinaryReader): UpdateShareRequest;
+}
+
+export namespace UpdateShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference.AsObject,
+    field?: UpdateShareRequest.UpdateField.AsObject,
+  }
+
+  export class UpdateField extends jspb.Message {
+    hasPermissions(): boolean;
+    clearPermissions(): void;
+    getPermissions(): cs3_sharing_collaboration_v1beta1_resources_pb.SharePermissions | undefined;
+    setPermissions(value?: cs3_sharing_collaboration_v1beta1_resources_pb.SharePermissions): void;
+
+    hasDisplayName(): boolean;
+    clearDisplayName(): void;
+    getDisplayName(): string;
+    setDisplayName(value: string): void;
+
+    getFieldCase(): UpdateField.FieldCase;
+    serializeBinary(): Uint8Array;
+    toObject(includeInstance?: boolean): UpdateField.AsObject;
+    static toObject(includeInstance: boolean, msg: UpdateField): UpdateField.AsObject;
+    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+    static serializeBinaryToWriter(message: UpdateField, writer: jspb.BinaryWriter): void;
+    static deserializeBinary(bytes: Uint8Array): UpdateField;
+    static deserializeBinaryFromReader(message: UpdateField, reader: jspb.BinaryReader): UpdateField;
+  }
+
+  export namespace UpdateField {
+    export type AsObject = {
+      permissions?: cs3_sharing_collaboration_v1beta1_resources_pb.SharePermissions.AsObject,
+      displayName: string,
+    }
+
+    export enum FieldCase {
+      FIELD_NOT_SET = 0,
+      PERMISSIONS = 2,
+      DISPLAY_NAME = 3,
+    }
+  }
+}
+
+export class UpdateShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_collaboration_v1beta1_resources_pb.Share | undefined;
+  setShare(value?: cs3_sharing_collaboration_v1beta1_resources_pb.Share): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateShareResponse): UpdateShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateShareResponse;
+  static deserializeBinaryFromReader(message: UpdateShareResponse, reader: jspb.BinaryReader): UpdateShareResponse;
+}
+
+export namespace UpdateShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_collaboration_v1beta1_resources_pb.Share.AsObject,
+  }
+}
+
+export class ListSharesRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearFiltersList(): void;
+  getFiltersList(): Array<cs3_sharing_collaboration_v1beta1_resources_pb.Filter>;
+  setFiltersList(value: Array<cs3_sharing_collaboration_v1beta1_resources_pb.Filter>): void;
+  addFilters(value?: cs3_sharing_collaboration_v1beta1_resources_pb.Filter, index?: number): cs3_sharing_collaboration_v1beta1_resources_pb.Filter;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListSharesRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListSharesRequest): ListSharesRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListSharesRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListSharesRequest;
+  static deserializeBinaryFromReader(message: ListSharesRequest, reader: jspb.BinaryReader): ListSharesRequest;
+}
+
+export namespace ListSharesRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    filtersList: Array<cs3_sharing_collaboration_v1beta1_resources_pb.Filter.AsObject>,
+  }
+}
+
+export class ListSharesResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearSharesList(): void;
+  getSharesList(): Array<cs3_sharing_collaboration_v1beta1_resources_pb.Share>;
+  setSharesList(value: Array<cs3_sharing_collaboration_v1beta1_resources_pb.Share>): void;
+  addShares(value?: cs3_sharing_collaboration_v1beta1_resources_pb.Share, index?: number): cs3_sharing_collaboration_v1beta1_resources_pb.Share;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListSharesResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListSharesResponse): ListSharesResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListSharesResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListSharesResponse;
+  static deserializeBinaryFromReader(message: ListSharesResponse, reader: jspb.BinaryReader): ListSharesResponse;
+}
+
+export namespace ListSharesResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    sharesList: Array<cs3_sharing_collaboration_v1beta1_resources_pb.Share.AsObject>,
+  }
+}
+
+export class RemoveShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference | undefined;
+  setRef(value?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemoveShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: RemoveShareRequest): RemoveShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemoveShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemoveShareRequest;
+  static deserializeBinaryFromReader(message: RemoveShareRequest, reader: jspb.BinaryReader): RemoveShareRequest;
+}
+
+export namespace RemoveShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference.AsObject,
+  }
+}
+
+export class RemoveShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemoveShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: RemoveShareResponse): RemoveShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemoveShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemoveShareResponse;
+  static deserializeBinaryFromReader(message: RemoveShareResponse, reader: jspb.BinaryReader): RemoveShareResponse;
+}
+
+export namespace RemoveShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference | undefined;
+  setRef(value?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetShareRequest): GetShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetShareRequest;
+  static deserializeBinaryFromReader(message: GetShareRequest, reader: jspb.BinaryReader): GetShareRequest;
+}
+
+export namespace GetShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference.AsObject,
+  }
+}
+
+export class GetShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_collaboration_v1beta1_resources_pb.Share | undefined;
+  setShare(value?: cs3_sharing_collaboration_v1beta1_resources_pb.Share): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetShareResponse): GetShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetShareResponse;
+  static deserializeBinaryFromReader(message: GetShareResponse, reader: jspb.BinaryReader): GetShareResponse;
+}
+
+export namespace GetShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_collaboration_v1beta1_resources_pb.Share.AsObject,
+  }
+}
+
+export class ListReceivedSharesRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearFiltersList(): void;
+  getFiltersList(): Array<cs3_sharing_collaboration_v1beta1_resources_pb.Filter>;
+  setFiltersList(value: Array<cs3_sharing_collaboration_v1beta1_resources_pb.Filter>): void;
+  addFilters(value?: cs3_sharing_collaboration_v1beta1_resources_pb.Filter, index?: number): cs3_sharing_collaboration_v1beta1_resources_pb.Filter;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListReceivedSharesRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListReceivedSharesRequest): ListReceivedSharesRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListReceivedSharesRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListReceivedSharesRequest;
+  static deserializeBinaryFromReader(message: ListReceivedSharesRequest, reader: jspb.BinaryReader): ListReceivedSharesRequest;
+}
+
+export namespace ListReceivedSharesRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    filtersList: Array<cs3_sharing_collaboration_v1beta1_resources_pb.Filter.AsObject>,
+  }
+}
+
+export class ListReceivedSharesResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearSharesList(): void;
+  getSharesList(): Array<cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare>;
+  setSharesList(value: Array<cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare>): void;
+  addShares(value?: cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare, index?: number): cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListReceivedSharesResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListReceivedSharesResponse): ListReceivedSharesResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListReceivedSharesResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListReceivedSharesResponse;
+  static deserializeBinaryFromReader(message: ListReceivedSharesResponse, reader: jspb.BinaryReader): ListReceivedSharesResponse;
+}
+
+export namespace ListReceivedSharesResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    sharesList: Array<cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare.AsObject>,
+  }
+}
+
+export class UpdateReceivedShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare | undefined;
+  setShare(value?: cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare): void;
+
+  hasUpdateMask(): boolean;
+  clearUpdateMask(): void;
+  getUpdateMask(): google_protobuf_field_mask_pb.FieldMask | undefined;
+  setUpdateMask(value?: google_protobuf_field_mask_pb.FieldMask): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateReceivedShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateReceivedShareRequest): UpdateReceivedShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateReceivedShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateReceivedShareRequest;
+  static deserializeBinaryFromReader(message: UpdateReceivedShareRequest, reader: jspb.BinaryReader): UpdateReceivedShareRequest;
+}
+
+export namespace UpdateReceivedShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare.AsObject,
+    updateMask?: google_protobuf_field_mask_pb.FieldMask.AsObject,
+  }
+}
+
+export class UpdateReceivedShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare | undefined;
+  setShare(value?: cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateReceivedShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateReceivedShareResponse): UpdateReceivedShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateReceivedShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateReceivedShareResponse;
+  static deserializeBinaryFromReader(message: UpdateReceivedShareResponse, reader: jspb.BinaryReader): UpdateReceivedShareResponse;
+}
+
+export namespace UpdateReceivedShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare.AsObject,
+  }
+}
+
+export class GetReceivedShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference | undefined;
+  setRef(value?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetReceivedShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetReceivedShareRequest): GetReceivedShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetReceivedShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetReceivedShareRequest;
+  static deserializeBinaryFromReader(message: GetReceivedShareRequest, reader: jspb.BinaryReader): GetReceivedShareRequest;
+}
+
+export namespace GetReceivedShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_collaboration_v1beta1_resources_pb.ShareReference.AsObject,
+  }
+}
+
+export class GetReceivedShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare | undefined;
+  setShare(value?: cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetReceivedShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetReceivedShareResponse): GetReceivedShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetReceivedShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetReceivedShareResponse;
+  static deserializeBinaryFromReader(message: GetReceivedShareResponse, reader: jspb.BinaryReader): GetReceivedShareResponse;
+}
+
+export namespace GetReceivedShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_collaboration_v1beta1_resources_pb.ReceivedShare.AsObject,
+  }
+}
+
diff --git a/cs3/sharing/collaboration/v1beta1/resources_pb.d.ts b/cs3/sharing/collaboration/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..b3f1d8f
--- /dev/null
+++ b/cs3/sharing/collaboration/v1beta1/resources_pb.d.ts
@@ -0,0 +1,313 @@
+// package: cs3.sharing.collaboration.v1beta1
+// file: cs3/sharing/collaboration/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class Share extends jspb.Message {
+  hasId(): boolean;
+  clearId(): void;
+  getId(): ShareId | undefined;
+  setId(value?: ShareId): void;
+
+  hasResourceId(): boolean;
+  clearResourceId(): void;
+  getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+  setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): SharePermissions | undefined;
+  setPermissions(value?: SharePermissions): void;
+
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): cs3_storage_provider_v1beta1_resources_pb.Grantee | undefined;
+  setGrantee(value?: cs3_storage_provider_v1beta1_resources_pb.Grantee): void;
+
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasCreator(): boolean;
+  clearCreator(): void;
+  getCreator(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setCreator(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasCtime(): boolean;
+  clearCtime(): void;
+  getCtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setCtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasMtime(): boolean;
+  clearMtime(): void;
+  getMtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setMtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Share.AsObject;
+  static toObject(includeInstance: boolean, msg: Share): Share.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Share, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Share;
+  static deserializeBinaryFromReader(message: Share, reader: jspb.BinaryReader): Share;
+}
+
+export namespace Share {
+  export type AsObject = {
+    id?: ShareId.AsObject,
+    resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+    permissions?: SharePermissions.AsObject,
+    grantee?: cs3_storage_provider_v1beta1_resources_pb.Grantee.AsObject,
+    owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    creator?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    ctime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    mtime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
+export class SharePermissions extends jspb.Message {
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): cs3_storage_provider_v1beta1_resources_pb.ResourcePermissions | undefined;
+  setPermissions(value?: cs3_storage_provider_v1beta1_resources_pb.ResourcePermissions): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): SharePermissions.AsObject;
+  static toObject(includeInstance: boolean, msg: SharePermissions): SharePermissions.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: SharePermissions, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): SharePermissions;
+  static deserializeBinaryFromReader(message: SharePermissions, reader: jspb.BinaryReader): SharePermissions;
+}
+
+export namespace SharePermissions {
+  export type AsObject = {
+    permissions?: cs3_storage_provider_v1beta1_resources_pb.ResourcePermissions.AsObject,
+  }
+}
+
+export class ReceivedShare extends jspb.Message {
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): Share | undefined;
+  setShare(value?: Share): void;
+
+  getState(): ShareState;
+  setState(value: ShareState): void;
+
+  hasMountPoint(): boolean;
+  clearMountPoint(): void;
+  getMountPoint(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setMountPoint(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ReceivedShare.AsObject;
+  static toObject(includeInstance: boolean, msg: ReceivedShare): ReceivedShare.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ReceivedShare, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ReceivedShare;
+  static deserializeBinaryFromReader(message: ReceivedShare, reader: jspb.BinaryReader): ReceivedShare;
+}
+
+export namespace ReceivedShare {
+  export type AsObject = {
+    share?: Share.AsObject,
+    state: ShareState,
+    mountPoint?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class ShareKey extends jspb.Message {
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasResourceId(): boolean;
+  clearResourceId(): void;
+  getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+  setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): cs3_storage_provider_v1beta1_resources_pb.Grantee | undefined;
+  setGrantee(value?: cs3_storage_provider_v1beta1_resources_pb.Grantee): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ShareKey.AsObject;
+  static toObject(includeInstance: boolean, msg: ShareKey): ShareKey.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ShareKey, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ShareKey;
+  static deserializeBinaryFromReader(message: ShareKey, reader: jspb.BinaryReader): ShareKey;
+}
+
+export namespace ShareKey {
+  export type AsObject = {
+    owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+    grantee?: cs3_storage_provider_v1beta1_resources_pb.Grantee.AsObject,
+  }
+}
+
+export class ShareId extends jspb.Message {
+  getOpaqueId(): string;
+  setOpaqueId(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ShareId.AsObject;
+  static toObject(includeInstance: boolean, msg: ShareId): ShareId.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ShareId, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ShareId;
+  static deserializeBinaryFromReader(message: ShareId, reader: jspb.BinaryReader): ShareId;
+}
+
+export namespace ShareId {
+  export type AsObject = {
+    opaqueId: string,
+  }
+}
+
+export class ShareReference extends jspb.Message {
+  hasId(): boolean;
+  clearId(): void;
+  getId(): ShareId | undefined;
+  setId(value?: ShareId): void;
+
+  hasKey(): boolean;
+  clearKey(): void;
+  getKey(): ShareKey | undefined;
+  setKey(value?: ShareKey): void;
+
+  getSpecCase(): ShareReference.SpecCase;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ShareReference.AsObject;
+  static toObject(includeInstance: boolean, msg: ShareReference): ShareReference.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ShareReference, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ShareReference;
+  static deserializeBinaryFromReader(message: ShareReference, reader: jspb.BinaryReader): ShareReference;
+}
+
+export namespace ShareReference {
+  export type AsObject = {
+    id?: ShareId.AsObject,
+    key?: ShareKey.AsObject,
+  }
+
+  export enum SpecCase {
+    SPEC_NOT_SET = 0,
+    ID = 1,
+    KEY = 2,
+  }
+}
+
+export class ShareGrant extends jspb.Message {
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): cs3_storage_provider_v1beta1_resources_pb.Grantee | undefined;
+  setGrantee(value?: cs3_storage_provider_v1beta1_resources_pb.Grantee): void;
+
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): SharePermissions | undefined;
+  setPermissions(value?: SharePermissions): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ShareGrant.AsObject;
+  static toObject(includeInstance: boolean, msg: ShareGrant): ShareGrant.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ShareGrant, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ShareGrant;
+  static deserializeBinaryFromReader(message: ShareGrant, reader: jspb.BinaryReader): ShareGrant;
+}
+
+export namespace ShareGrant {
+  export type AsObject = {
+    grantee?: cs3_storage_provider_v1beta1_resources_pb.Grantee.AsObject,
+    permissions?: SharePermissions.AsObject,
+  }
+}
+
+export class Filter extends jspb.Message {
+  getType(): Filter.Type;
+  setType(value: Filter.Type): void;
+
+  hasResourceId(): boolean;
+  clearResourceId(): void;
+  getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+  setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasCreator(): boolean;
+  clearCreator(): void;
+  getCreator(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setCreator(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasGranteeType(): boolean;
+  clearGranteeType(): void;
+  getGranteeType(): cs3_storage_provider_v1beta1_resources_pb.GranteeType;
+  setGranteeType(value: cs3_storage_provider_v1beta1_resources_pb.GranteeType): void;
+
+  getTermCase(): Filter.TermCase;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Filter.AsObject;
+  static toObject(includeInstance: boolean, msg: Filter): Filter.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Filter, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Filter;
+  static deserializeBinaryFromReader(message: Filter, reader: jspb.BinaryReader): Filter;
+}
+
+export namespace Filter {
+  export type AsObject = {
+    type: Filter.Type,
+    resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+    owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    creator?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    granteeType: cs3_storage_provider_v1beta1_resources_pb.GranteeType,
+  }
+
+  export enum Type {
+    TYPE_INVALID = 0,
+    TYPE_NO = 1,
+    TYPE_RESOURCE_ID = 2,
+    TYPE_OWNER = 3,
+    TYPE_CREATOR = 4,
+    TYPE_GRANTEE_TYPE = 5,
+    TYPE_EXCLUDE_DENIALS = 6,
+  }
+
+  export enum TermCase {
+    TERM_NOT_SET = 0,
+    RESOURCE_ID = 3,
+    OWNER = 4,
+    CREATOR = 5,
+    GRANTEE_TYPE = 6,
+  }
+}
+
+export enum ShareState {
+  SHARE_STATE_INVALID = 0,
+  SHARE_STATE_PENDING = 1,
+  SHARE_STATE_ACCEPTED = 2,
+  SHARE_STATE_REJECTED = 3,
+}
+
diff --git a/cs3/sharing/link/v1beta1/link_api_grpc_pb.d.ts b/cs3/sharing/link/v1beta1/link_api_grpc_pb.d.ts
new file mode 100644
index 0000000..67b33d8
--- /dev/null
+++ b/cs3/sharing/link/v1beta1/link_api_grpc_pb.d.ts
@@ -0,0 +1,133 @@
+// package: cs3.sharing.link.v1beta1
+// file: cs3/sharing/link/v1beta1/link_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_sharing_link_v1beta1_link_api_pb from '../../../../cs3/sharing/link/v1beta1/link_api_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_sharing_link_v1beta1_resources_pb from '../../../../cs3/sharing/link/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface ILinkAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  createPublicShare: ILinkAPIService_ICreatePublicShare;
+  removePublicShare: ILinkAPIService_IRemovePublicShare;
+  getPublicShare: ILinkAPIService_IGetPublicShare;
+  getPublicShareByToken: ILinkAPIService_IGetPublicShareByToken;
+  listPublicShares: ILinkAPIService_IListPublicShares;
+  updatePublicShare: ILinkAPIService_IUpdatePublicShare;
+}
+
+interface ILinkAPIService_ICreatePublicShare extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse> {
+  path: '/cs3.sharing.link.v1beta1.LinkAPI/CreatePublicShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse>;
+}
+
+interface ILinkAPIService_IRemovePublicShare extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse> {
+  path: '/cs3.sharing.link.v1beta1.LinkAPI/RemovePublicShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse>;
+}
+
+interface ILinkAPIService_IGetPublicShare extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse> {
+  path: '/cs3.sharing.link.v1beta1.LinkAPI/GetPublicShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse>;
+}
+
+interface ILinkAPIService_IGetPublicShareByToken extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse> {
+  path: '/cs3.sharing.link.v1beta1.LinkAPI/GetPublicShareByToken'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse>;
+}
+
+interface ILinkAPIService_IListPublicShares extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse> {
+  path: '/cs3.sharing.link.v1beta1.LinkAPI/ListPublicShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse>;
+}
+
+interface ILinkAPIService_IUpdatePublicShare extends grpc.MethodDefinition<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse> {
+  path: '/cs3.sharing.link.v1beta1.LinkAPI/UpdatePublicShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse>;
+}
+
+export const LinkAPIService: ILinkAPIService;
+export interface ILinkAPIServer extends grpc.UntypedServiceImplementation {
+  createPublicShare: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse>;
+  removePublicShare: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse>;
+  getPublicShare: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse>;
+  getPublicShareByToken: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse>;
+  listPublicShares: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse>;
+  updatePublicShare: grpc.handleUnaryCall<cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse>;
+}
+
+export interface ILinkAPIClient {
+  createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class LinkAPIClient extends grpc.Client implements ILinkAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public createPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.CreatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public removePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.RemovePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  public getPublicShareByToken(request: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.GetPublicShareByTokenResponse) => void): grpc.ClientUnaryCall;
+  public listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  public listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  public listPublicShares(request: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.ListPublicSharesResponse) => void): grpc.ClientUnaryCall;
+  public updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+  public updatePublicShare(request: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_link_v1beta1_link_api_pb.UpdatePublicShareResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/sharing/link/v1beta1/link_api_grpc_pb.js b/cs3/sharing/link/v1beta1/link_api_grpc_pb.js
index e73cdab..c8f6ca2 100644
--- a/cs3/sharing/link/v1beta1/link_api_grpc_pb.js
+++ b/cs3/sharing/link/v1beta1/link_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_sharing_link_v1beta1_link_api_pb = require('../../../../cs3/sharing/link/v1beta1/link_api_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
diff --git a/cs3/sharing/link/v1beta1/link_api_pb.d.ts b/cs3/sharing/link/v1beta1/link_api_pb.d.ts
new file mode 100644
index 0000000..4f38b68
--- /dev/null
+++ b/cs3/sharing/link/v1beta1/link_api_pb.d.ts
@@ -0,0 +1,499 @@
+// package: cs3.sharing.link.v1beta1
+// file: cs3/sharing/link/v1beta1/link_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_sharing_link_v1beta1_resources_pb from '../../../../cs3/sharing/link/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class CreatePublicShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasResourceInfo(): boolean;
+  clearResourceInfo(): void;
+  getResourceInfo(): cs3_storage_provider_v1beta1_resources_pb.ResourceInfo | undefined;
+  setResourceInfo(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo): void;
+
+  hasGrant(): boolean;
+  clearGrant(): void;
+  getGrant(): cs3_sharing_link_v1beta1_resources_pb.Grant | undefined;
+  setGrant(value?: cs3_sharing_link_v1beta1_resources_pb.Grant): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreatePublicShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreatePublicShareRequest): CreatePublicShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreatePublicShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreatePublicShareRequest;
+  static deserializeBinaryFromReader(message: CreatePublicShareRequest, reader: jspb.BinaryReader): CreatePublicShareRequest;
+}
+
+export namespace CreatePublicShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    resourceInfo?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo.AsObject,
+    grant?: cs3_sharing_link_v1beta1_resources_pb.Grant.AsObject,
+  }
+}
+
+export class CreatePublicShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_link_v1beta1_resources_pb.PublicShare | undefined;
+  setShare(value?: cs3_sharing_link_v1beta1_resources_pb.PublicShare): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreatePublicShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreatePublicShareResponse): CreatePublicShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreatePublicShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreatePublicShareResponse;
+  static deserializeBinaryFromReader(message: CreatePublicShareResponse, reader: jspb.BinaryReader): CreatePublicShareResponse;
+}
+
+export namespace CreatePublicShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_link_v1beta1_resources_pb.PublicShare.AsObject,
+  }
+}
+
+export class UpdatePublicShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_link_v1beta1_resources_pb.PublicShareReference | undefined;
+  setRef(value?: cs3_sharing_link_v1beta1_resources_pb.PublicShareReference): void;
+
+  hasUpdate(): boolean;
+  clearUpdate(): void;
+  getUpdate(): UpdatePublicShareRequest.Update | undefined;
+  setUpdate(value?: UpdatePublicShareRequest.Update): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdatePublicShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdatePublicShareRequest): UpdatePublicShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdatePublicShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdatePublicShareRequest;
+  static deserializeBinaryFromReader(message: UpdatePublicShareRequest, reader: jspb.BinaryReader): UpdatePublicShareRequest;
+}
+
+export namespace UpdatePublicShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_link_v1beta1_resources_pb.PublicShareReference.AsObject,
+    update?: UpdatePublicShareRequest.Update.AsObject,
+  }
+
+  export class Update extends jspb.Message {
+    getType(): UpdatePublicShareRequest.Update.Type;
+    setType(value: UpdatePublicShareRequest.Update.Type): void;
+
+    hasGrant(): boolean;
+    clearGrant(): void;
+    getGrant(): cs3_sharing_link_v1beta1_resources_pb.Grant | undefined;
+    setGrant(value?: cs3_sharing_link_v1beta1_resources_pb.Grant): void;
+
+    getDisplayName(): string;
+    setDisplayName(value: string): void;
+
+    serializeBinary(): Uint8Array;
+    toObject(includeInstance?: boolean): Update.AsObject;
+    static toObject(includeInstance: boolean, msg: Update): Update.AsObject;
+    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+    static serializeBinaryToWriter(message: Update, writer: jspb.BinaryWriter): void;
+    static deserializeBinary(bytes: Uint8Array): Update;
+    static deserializeBinaryFromReader(message: Update, reader: jspb.BinaryReader): Update;
+  }
+
+  export namespace Update {
+    export type AsObject = {
+      type: UpdatePublicShareRequest.Update.Type,
+      grant?: cs3_sharing_link_v1beta1_resources_pb.Grant.AsObject,
+      displayName: string,
+    }
+
+    export enum Type {
+      TYPE_INVALID = 0,
+      TYPE_PERMISSIONS = 1,
+      TYPE_PASSWORD = 2,
+      TYPE_EXPIRATION = 3,
+      TYPE_DISPLAYNAME = 4,
+    }
+  }
+}
+
+export class UpdatePublicShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_link_v1beta1_resources_pb.PublicShare | undefined;
+  setShare(value?: cs3_sharing_link_v1beta1_resources_pb.PublicShare): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdatePublicShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdatePublicShareResponse): UpdatePublicShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdatePublicShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdatePublicShareResponse;
+  static deserializeBinaryFromReader(message: UpdatePublicShareResponse, reader: jspb.BinaryReader): UpdatePublicShareResponse;
+}
+
+export namespace UpdatePublicShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_link_v1beta1_resources_pb.PublicShare.AsObject,
+  }
+}
+
+export class ListPublicSharesRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearFiltersList(): void;
+  getFiltersList(): Array<ListPublicSharesRequest.Filter>;
+  setFiltersList(value: Array<ListPublicSharesRequest.Filter>): void;
+  addFilters(value?: ListPublicSharesRequest.Filter, index?: number): ListPublicSharesRequest.Filter;
+
+  getSign(): boolean;
+  setSign(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListPublicSharesRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListPublicSharesRequest): ListPublicSharesRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListPublicSharesRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListPublicSharesRequest;
+  static deserializeBinaryFromReader(message: ListPublicSharesRequest, reader: jspb.BinaryReader): ListPublicSharesRequest;
+}
+
+export namespace ListPublicSharesRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    filtersList: Array<ListPublicSharesRequest.Filter.AsObject>,
+    sign: boolean,
+  }
+
+  export class Filter extends jspb.Message {
+    getType(): ListPublicSharesRequest.Filter.Type;
+    setType(value: ListPublicSharesRequest.Filter.Type): void;
+
+    hasResourceId(): boolean;
+    clearResourceId(): void;
+    getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+    setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+    hasOwner(): boolean;
+    clearOwner(): void;
+    getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+    setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+    hasCreator(): boolean;
+    clearCreator(): void;
+    getCreator(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+    setCreator(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+    getTermCase(): Filter.TermCase;
+    serializeBinary(): Uint8Array;
+    toObject(includeInstance?: boolean): Filter.AsObject;
+    static toObject(includeInstance: boolean, msg: Filter): Filter.AsObject;
+    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+    static serializeBinaryToWriter(message: Filter, writer: jspb.BinaryWriter): void;
+    static deserializeBinary(bytes: Uint8Array): Filter;
+    static deserializeBinaryFromReader(message: Filter, reader: jspb.BinaryReader): Filter;
+  }
+
+  export namespace Filter {
+    export type AsObject = {
+      type: ListPublicSharesRequest.Filter.Type,
+      resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+      owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+      creator?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    }
+
+    export enum Type {
+      TYPE_INVALID = 0,
+      TYPE_RESOURCE_ID = 1,
+      TYPE_OWNER = 2,
+      TYPE_CREATOR = 3,
+    }
+
+    export enum TermCase {
+      TERM_NOT_SET = 0,
+      RESOURCE_ID = 3,
+      OWNER = 4,
+      CREATOR = 5,
+    }
+  }
+}
+
+export class ListPublicSharesResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearShareList(): void;
+  getShareList(): Array<cs3_sharing_link_v1beta1_resources_pb.PublicShare>;
+  setShareList(value: Array<cs3_sharing_link_v1beta1_resources_pb.PublicShare>): void;
+  addShare(value?: cs3_sharing_link_v1beta1_resources_pb.PublicShare, index?: number): cs3_sharing_link_v1beta1_resources_pb.PublicShare;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListPublicSharesResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListPublicSharesResponse): ListPublicSharesResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListPublicSharesResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListPublicSharesResponse;
+  static deserializeBinaryFromReader(message: ListPublicSharesResponse, reader: jspb.BinaryReader): ListPublicSharesResponse;
+}
+
+export namespace ListPublicSharesResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    shareList: Array<cs3_sharing_link_v1beta1_resources_pb.PublicShare.AsObject>,
+  }
+}
+
+export class RemovePublicShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_link_v1beta1_resources_pb.PublicShareReference | undefined;
+  setRef(value?: cs3_sharing_link_v1beta1_resources_pb.PublicShareReference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemovePublicShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: RemovePublicShareRequest): RemovePublicShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemovePublicShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemovePublicShareRequest;
+  static deserializeBinaryFromReader(message: RemovePublicShareRequest, reader: jspb.BinaryReader): RemovePublicShareRequest;
+}
+
+export namespace RemovePublicShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_link_v1beta1_resources_pb.PublicShareReference.AsObject,
+  }
+}
+
+export class RemovePublicShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemovePublicShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: RemovePublicShareResponse): RemovePublicShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemovePublicShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemovePublicShareResponse;
+  static deserializeBinaryFromReader(message: RemovePublicShareResponse, reader: jspb.BinaryReader): RemovePublicShareResponse;
+}
+
+export namespace RemovePublicShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetPublicShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_link_v1beta1_resources_pb.PublicShareReference | undefined;
+  setRef(value?: cs3_sharing_link_v1beta1_resources_pb.PublicShareReference): void;
+
+  getSign(): boolean;
+  setSign(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetPublicShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetPublicShareRequest): GetPublicShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetPublicShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetPublicShareRequest;
+  static deserializeBinaryFromReader(message: GetPublicShareRequest, reader: jspb.BinaryReader): GetPublicShareRequest;
+}
+
+export namespace GetPublicShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_link_v1beta1_resources_pb.PublicShareReference.AsObject,
+    sign: boolean,
+  }
+}
+
+export class GetPublicShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_link_v1beta1_resources_pb.PublicShare | undefined;
+  setShare(value?: cs3_sharing_link_v1beta1_resources_pb.PublicShare): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetPublicShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetPublicShareResponse): GetPublicShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetPublicShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetPublicShareResponse;
+  static deserializeBinaryFromReader(message: GetPublicShareResponse, reader: jspb.BinaryReader): GetPublicShareResponse;
+}
+
+export namespace GetPublicShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_link_v1beta1_resources_pb.PublicShare.AsObject,
+  }
+}
+
+export class GetPublicShareByTokenRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getToken(): string;
+  setToken(value: string): void;
+
+  hasAuthentication(): boolean;
+  clearAuthentication(): void;
+  getAuthentication(): cs3_sharing_link_v1beta1_resources_pb.PublicShareAuthentication | undefined;
+  setAuthentication(value?: cs3_sharing_link_v1beta1_resources_pb.PublicShareAuthentication): void;
+
+  getSign(): boolean;
+  setSign(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetPublicShareByTokenRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetPublicShareByTokenRequest): GetPublicShareByTokenRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetPublicShareByTokenRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetPublicShareByTokenRequest;
+  static deserializeBinaryFromReader(message: GetPublicShareByTokenRequest, reader: jspb.BinaryReader): GetPublicShareByTokenRequest;
+}
+
+export namespace GetPublicShareByTokenRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    token: string,
+    authentication?: cs3_sharing_link_v1beta1_resources_pb.PublicShareAuthentication.AsObject,
+    sign: boolean,
+  }
+}
+
+export class GetPublicShareByTokenResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_link_v1beta1_resources_pb.PublicShare | undefined;
+  setShare(value?: cs3_sharing_link_v1beta1_resources_pb.PublicShare): void;
+
+  getPasswordHash(): string;
+  setPasswordHash(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetPublicShareByTokenResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetPublicShareByTokenResponse): GetPublicShareByTokenResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetPublicShareByTokenResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetPublicShareByTokenResponse;
+  static deserializeBinaryFromReader(message: GetPublicShareByTokenResponse, reader: jspb.BinaryReader): GetPublicShareByTokenResponse;
+}
+
+export namespace GetPublicShareByTokenResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_link_v1beta1_resources_pb.PublicShare.AsObject,
+    passwordHash: string,
+  }
+}
+
diff --git a/cs3/sharing/link/v1beta1/resources_pb.d.ts b/cs3/sharing/link/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..de2cd32
--- /dev/null
+++ b/cs3/sharing/link/v1beta1/resources_pb.d.ts
@@ -0,0 +1,260 @@
+// package: cs3.sharing.link.v1beta1
+// file: cs3/sharing/link/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class PublicShare extends jspb.Message {
+  hasId(): boolean;
+  clearId(): void;
+  getId(): PublicShareId | undefined;
+  setId(value?: PublicShareId): void;
+
+  getToken(): string;
+  setToken(value: string): void;
+
+  hasResourceId(): boolean;
+  clearResourceId(): void;
+  getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+  setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): PublicSharePermissions | undefined;
+  setPermissions(value?: PublicSharePermissions): void;
+
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasCreator(): boolean;
+  clearCreator(): void;
+  getCreator(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setCreator(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasCtime(): boolean;
+  clearCtime(): void;
+  getCtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setCtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasMtime(): boolean;
+  clearMtime(): void;
+  getMtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setMtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  getPasswordProtected(): boolean;
+  setPasswordProtected(value: boolean): void;
+
+  hasExpiration(): boolean;
+  clearExpiration(): void;
+  getExpiration(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setExpiration(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  getDisplayName(): string;
+  setDisplayName(value: string): void;
+
+  hasSignature(): boolean;
+  clearSignature(): void;
+  getSignature(): ShareSignature | undefined;
+  setSignature(value?: ShareSignature): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): PublicShare.AsObject;
+  static toObject(includeInstance: boolean, msg: PublicShare): PublicShare.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: PublicShare, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): PublicShare;
+  static deserializeBinaryFromReader(message: PublicShare, reader: jspb.BinaryReader): PublicShare;
+}
+
+export namespace PublicShare {
+  export type AsObject = {
+    id?: PublicShareId.AsObject,
+    token: string,
+    resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+    permissions?: PublicSharePermissions.AsObject,
+    owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    creator?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    ctime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    mtime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    passwordProtected: boolean,
+    expiration?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    displayName: string,
+    signature?: ShareSignature.AsObject,
+  }
+}
+
+export class PublicSharePermissions extends jspb.Message {
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): cs3_storage_provider_v1beta1_resources_pb.ResourcePermissions | undefined;
+  setPermissions(value?: cs3_storage_provider_v1beta1_resources_pb.ResourcePermissions): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): PublicSharePermissions.AsObject;
+  static toObject(includeInstance: boolean, msg: PublicSharePermissions): PublicSharePermissions.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: PublicSharePermissions, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): PublicSharePermissions;
+  static deserializeBinaryFromReader(message: PublicSharePermissions, reader: jspb.BinaryReader): PublicSharePermissions;
+}
+
+export namespace PublicSharePermissions {
+  export type AsObject = {
+    permissions?: cs3_storage_provider_v1beta1_resources_pb.ResourcePermissions.AsObject,
+  }
+}
+
+export class PublicShareId extends jspb.Message {
+  getOpaqueId(): string;
+  setOpaqueId(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): PublicShareId.AsObject;
+  static toObject(includeInstance: boolean, msg: PublicShareId): PublicShareId.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: PublicShareId, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): PublicShareId;
+  static deserializeBinaryFromReader(message: PublicShareId, reader: jspb.BinaryReader): PublicShareId;
+}
+
+export namespace PublicShareId {
+  export type AsObject = {
+    opaqueId: string,
+  }
+}
+
+export class PublicShareReference extends jspb.Message {
+  hasId(): boolean;
+  clearId(): void;
+  getId(): PublicShareId | undefined;
+  setId(value?: PublicShareId): void;
+
+  hasToken(): boolean;
+  clearToken(): void;
+  getToken(): string;
+  setToken(value: string): void;
+
+  getSpecCase(): PublicShareReference.SpecCase;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): PublicShareReference.AsObject;
+  static toObject(includeInstance: boolean, msg: PublicShareReference): PublicShareReference.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: PublicShareReference, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): PublicShareReference;
+  static deserializeBinaryFromReader(message: PublicShareReference, reader: jspb.BinaryReader): PublicShareReference;
+}
+
+export namespace PublicShareReference {
+  export type AsObject = {
+    id?: PublicShareId.AsObject,
+    token: string,
+  }
+
+  export enum SpecCase {
+    SPEC_NOT_SET = 0,
+    ID = 1,
+    TOKEN = 2,
+  }
+}
+
+export class PublicShareAuthentication extends jspb.Message {
+  hasPassword(): boolean;
+  clearPassword(): void;
+  getPassword(): string;
+  setPassword(value: string): void;
+
+  hasSignature(): boolean;
+  clearSignature(): void;
+  getSignature(): ShareSignature | undefined;
+  setSignature(value?: ShareSignature): void;
+
+  getSpecCase(): PublicShareAuthentication.SpecCase;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): PublicShareAuthentication.AsObject;
+  static toObject(includeInstance: boolean, msg: PublicShareAuthentication): PublicShareAuthentication.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: PublicShareAuthentication, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): PublicShareAuthentication;
+  static deserializeBinaryFromReader(message: PublicShareAuthentication, reader: jspb.BinaryReader): PublicShareAuthentication;
+}
+
+export namespace PublicShareAuthentication {
+  export type AsObject = {
+    password: string,
+    signature?: ShareSignature.AsObject,
+  }
+
+  export enum SpecCase {
+    SPEC_NOT_SET = 0,
+    PASSWORD = 1,
+    SIGNATURE = 2,
+  }
+}
+
+export class ShareSignature extends jspb.Message {
+  getSignature(): string;
+  setSignature(value: string): void;
+
+  hasSignatureExpiration(): boolean;
+  clearSignatureExpiration(): void;
+  getSignatureExpiration(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setSignatureExpiration(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ShareSignature.AsObject;
+  static toObject(includeInstance: boolean, msg: ShareSignature): ShareSignature.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ShareSignature, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ShareSignature;
+  static deserializeBinaryFromReader(message: ShareSignature, reader: jspb.BinaryReader): ShareSignature;
+}
+
+export namespace ShareSignature {
+  export type AsObject = {
+    signature: string,
+    signatureExpiration?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
+export class Grant extends jspb.Message {
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): PublicSharePermissions | undefined;
+  setPermissions(value?: PublicSharePermissions): void;
+
+  getPassword(): string;
+  setPassword(value: string): void;
+
+  hasExpiration(): boolean;
+  clearExpiration(): void;
+  getExpiration(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setExpiration(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Grant.AsObject;
+  static toObject(includeInstance: boolean, msg: Grant): Grant.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Grant, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Grant;
+  static deserializeBinaryFromReader(message: Grant, reader: jspb.BinaryReader): Grant;
+}
+
+export namespace Grant {
+  export type AsObject = {
+    permissions?: PublicSharePermissions.AsObject,
+    password: string,
+    expiration?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
diff --git a/cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.d.ts b/cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.d.ts
new file mode 100644
index 0000000..543acb8
--- /dev/null
+++ b/cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.d.ts
@@ -0,0 +1,171 @@
+// package: cs3.sharing.ocm.v1beta1
+// file: cs3/sharing/ocm/v1beta1/ocm_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_sharing_ocm_v1beta1_ocm_api_pb from '../../../../cs3/sharing/ocm/v1beta1/ocm_api_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_ocm_provider_v1beta1_resources_pb from '../../../../cs3/ocm/provider/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_sharing_ocm_v1beta1_resources_pb from '../../../../cs3/sharing/ocm/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+import * as google_protobuf_field_mask_pb from 'google-protobuf/google/protobuf/field_mask_pb';
+
+interface IOcmAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  createOCMShare: IOcmAPIService_ICreateOCMShare;
+  removeOCMShare: IOcmAPIService_IRemoveOCMShare;
+  getOCMShare: IOcmAPIService_IGetOCMShare;
+  listOCMShares: IOcmAPIService_IListOCMShares;
+  updateOCMShare: IOcmAPIService_IUpdateOCMShare;
+  listReceivedOCMShares: IOcmAPIService_IListReceivedOCMShares;
+  updateReceivedOCMShare: IOcmAPIService_IUpdateReceivedOCMShare;
+  getReceivedOCMShare: IOcmAPIService_IGetReceivedOCMShare;
+}
+
+interface IOcmAPIService_ICreateOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse> {
+  path: '/cs3.sharing.ocm.v1beta1.OcmAPI/CreateOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse>;
+}
+
+interface IOcmAPIService_IRemoveOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse> {
+  path: '/cs3.sharing.ocm.v1beta1.OcmAPI/RemoveOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse>;
+}
+
+interface IOcmAPIService_IGetOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse> {
+  path: '/cs3.sharing.ocm.v1beta1.OcmAPI/GetOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse>;
+}
+
+interface IOcmAPIService_IListOCMShares extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse> {
+  path: '/cs3.sharing.ocm.v1beta1.OcmAPI/ListOCMShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse>;
+}
+
+interface IOcmAPIService_IUpdateOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse> {
+  path: '/cs3.sharing.ocm.v1beta1.OcmAPI/UpdateOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse>;
+}
+
+interface IOcmAPIService_IListReceivedOCMShares extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse> {
+  path: '/cs3.sharing.ocm.v1beta1.OcmAPI/ListReceivedOCMShares'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse>;
+}
+
+interface IOcmAPIService_IUpdateReceivedOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse> {
+  path: '/cs3.sharing.ocm.v1beta1.OcmAPI/UpdateReceivedOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse>;
+}
+
+interface IOcmAPIService_IGetReceivedOCMShare extends grpc.MethodDefinition<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse> {
+  path: '/cs3.sharing.ocm.v1beta1.OcmAPI/GetReceivedOCMShare'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest>;
+  requestDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest>;
+  responseSerialize: grpc.serialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse>;
+  responseDeserialize: grpc.deserialize<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse>;
+}
+
+export const OcmAPIService: IOcmAPIService;
+export interface IOcmAPIServer extends grpc.UntypedServiceImplementation {
+  createOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse>;
+  removeOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse>;
+  getOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse>;
+  listOCMShares: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse>;
+  updateOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse>;
+  listReceivedOCMShares: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse>;
+  updateReceivedOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse>;
+  getReceivedOCMShare: grpc.handleUnaryCall<cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse>;
+}
+
+export interface IOcmAPIClient {
+  createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class OcmAPIClient extends grpc.Client implements IOcmAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public createOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.CreateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public removeOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.RemoveOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public listOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public updateOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public listReceivedOCMShares(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.ListReceivedOCMSharesResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public updateReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.UpdateReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+  public getReceivedOCMShare(request: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_sharing_ocm_v1beta1_ocm_api_pb.GetReceivedOCMShareResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.js b/cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.js
index 002ce01..b901c48 100644
--- a/cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.js
+++ b/cs3/sharing/ocm/v1beta1/ocm_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_sharing_ocm_v1beta1_ocm_api_pb = require('../../../../cs3/sharing/ocm/v1beta1/ocm_api_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
 var cs3_ocm_provider_v1beta1_resources_pb = require('../../../../cs3/ocm/provider/v1beta1/resources_pb.js');
diff --git a/cs3/sharing/ocm/v1beta1/ocm_api_pb.d.ts b/cs3/sharing/ocm/v1beta1/ocm_api_pb.d.ts
new file mode 100644
index 0000000..5929da6
--- /dev/null
+++ b/cs3/sharing/ocm/v1beta1/ocm_api_pb.d.ts
@@ -0,0 +1,599 @@
+// package: cs3.sharing.ocm.v1beta1
+// file: cs3/sharing/ocm/v1beta1/ocm_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_ocm_provider_v1beta1_resources_pb from '../../../../cs3/ocm/provider/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_sharing_ocm_v1beta1_resources_pb from '../../../../cs3/sharing/ocm/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+import * as google_protobuf_field_mask_pb from 'google-protobuf/google/protobuf/field_mask_pb';
+
+export class CreateOCMShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasResourceId(): boolean;
+  clearResourceId(): void;
+  getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+  setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+  hasGrant(): boolean;
+  clearGrant(): void;
+  getGrant(): cs3_sharing_ocm_v1beta1_resources_pb.ShareGrant | undefined;
+  setGrant(value?: cs3_sharing_ocm_v1beta1_resources_pb.ShareGrant): void;
+
+  hasRecipientMeshProvider(): boolean;
+  clearRecipientMeshProvider(): void;
+  getRecipientMeshProvider(): cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo | undefined;
+  setRecipientMeshProvider(value?: cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateOCMShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateOCMShareRequest): CreateOCMShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateOCMShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateOCMShareRequest;
+  static deserializeBinaryFromReader(message: CreateOCMShareRequest, reader: jspb.BinaryReader): CreateOCMShareRequest;
+}
+
+export namespace CreateOCMShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+    grant?: cs3_sharing_ocm_v1beta1_resources_pb.ShareGrant.AsObject,
+    recipientMeshProvider?: cs3_ocm_provider_v1beta1_resources_pb.ProviderInfo.AsObject,
+  }
+}
+
+export class CreateOCMShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_ocm_v1beta1_resources_pb.Share | undefined;
+  setShare(value?: cs3_sharing_ocm_v1beta1_resources_pb.Share): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateOCMShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateOCMShareResponse): CreateOCMShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateOCMShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateOCMShareResponse;
+  static deserializeBinaryFromReader(message: CreateOCMShareResponse, reader: jspb.BinaryReader): CreateOCMShareResponse;
+}
+
+export namespace CreateOCMShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_ocm_v1beta1_resources_pb.Share.AsObject,
+  }
+}
+
+export class UpdateOCMShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_ocm_v1beta1_resources_pb.ShareReference | undefined;
+  setRef(value?: cs3_sharing_ocm_v1beta1_resources_pb.ShareReference): void;
+
+  hasField(): boolean;
+  clearField(): void;
+  getField(): UpdateOCMShareRequest.UpdateField | undefined;
+  setField(value?: UpdateOCMShareRequest.UpdateField): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateOCMShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateOCMShareRequest): UpdateOCMShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateOCMShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateOCMShareRequest;
+  static deserializeBinaryFromReader(message: UpdateOCMShareRequest, reader: jspb.BinaryReader): UpdateOCMShareRequest;
+}
+
+export namespace UpdateOCMShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_ocm_v1beta1_resources_pb.ShareReference.AsObject,
+    field?: UpdateOCMShareRequest.UpdateField.AsObject,
+  }
+
+  export class UpdateField extends jspb.Message {
+    hasPermissions(): boolean;
+    clearPermissions(): void;
+    getPermissions(): cs3_sharing_ocm_v1beta1_resources_pb.SharePermissions | undefined;
+    setPermissions(value?: cs3_sharing_ocm_v1beta1_resources_pb.SharePermissions): void;
+
+    hasDisplayName(): boolean;
+    clearDisplayName(): void;
+    getDisplayName(): string;
+    setDisplayName(value: string): void;
+
+    getFieldCase(): UpdateField.FieldCase;
+    serializeBinary(): Uint8Array;
+    toObject(includeInstance?: boolean): UpdateField.AsObject;
+    static toObject(includeInstance: boolean, msg: UpdateField): UpdateField.AsObject;
+    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+    static serializeBinaryToWriter(message: UpdateField, writer: jspb.BinaryWriter): void;
+    static deserializeBinary(bytes: Uint8Array): UpdateField;
+    static deserializeBinaryFromReader(message: UpdateField, reader: jspb.BinaryReader): UpdateField;
+  }
+
+  export namespace UpdateField {
+    export type AsObject = {
+      permissions?: cs3_sharing_ocm_v1beta1_resources_pb.SharePermissions.AsObject,
+      displayName: string,
+    }
+
+    export enum FieldCase {
+      FIELD_NOT_SET = 0,
+      PERMISSIONS = 2,
+      DISPLAY_NAME = 3,
+    }
+  }
+}
+
+export class UpdateOCMShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateOCMShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateOCMShareResponse): UpdateOCMShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateOCMShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateOCMShareResponse;
+  static deserializeBinaryFromReader(message: UpdateOCMShareResponse, reader: jspb.BinaryReader): UpdateOCMShareResponse;
+}
+
+export namespace UpdateOCMShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class ListOCMSharesRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearFiltersList(): void;
+  getFiltersList(): Array<ListOCMSharesRequest.Filter>;
+  setFiltersList(value: Array<ListOCMSharesRequest.Filter>): void;
+  addFilters(value?: ListOCMSharesRequest.Filter, index?: number): ListOCMSharesRequest.Filter;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListOCMSharesRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListOCMSharesRequest): ListOCMSharesRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListOCMSharesRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListOCMSharesRequest;
+  static deserializeBinaryFromReader(message: ListOCMSharesRequest, reader: jspb.BinaryReader): ListOCMSharesRequest;
+}
+
+export namespace ListOCMSharesRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    filtersList: Array<ListOCMSharesRequest.Filter.AsObject>,
+  }
+
+  export class Filter extends jspb.Message {
+    getType(): ListOCMSharesRequest.Filter.Type;
+    setType(value: ListOCMSharesRequest.Filter.Type): void;
+
+    hasResourceId(): boolean;
+    clearResourceId(): void;
+    getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+    setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+    hasOwner(): boolean;
+    clearOwner(): void;
+    getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+    setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+    hasCreator(): boolean;
+    clearCreator(): void;
+    getCreator(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+    setCreator(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+    getTermCase(): Filter.TermCase;
+    serializeBinary(): Uint8Array;
+    toObject(includeInstance?: boolean): Filter.AsObject;
+    static toObject(includeInstance: boolean, msg: Filter): Filter.AsObject;
+    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+    static serializeBinaryToWriter(message: Filter, writer: jspb.BinaryWriter): void;
+    static deserializeBinary(bytes: Uint8Array): Filter;
+    static deserializeBinaryFromReader(message: Filter, reader: jspb.BinaryReader): Filter;
+  }
+
+  export namespace Filter {
+    export type AsObject = {
+      type: ListOCMSharesRequest.Filter.Type,
+      resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+      owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+      creator?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    }
+
+    export enum Type {
+      TYPE_INVALID = 0,
+      TYPE_NO = 1,
+      TYPE_RESOURCE_ID = 2,
+      TYPE_OWNER = 3,
+      TYPE_CREATOR = 4,
+      TYPE_OWNER_PROVIDER = 5,
+      TYPE_CREATOR_PROVIDER = 6,
+    }
+
+    export enum TermCase {
+      TERM_NOT_SET = 0,
+      RESOURCE_ID = 3,
+      OWNER = 4,
+      CREATOR = 5,
+    }
+  }
+}
+
+export class ListOCMSharesResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearSharesList(): void;
+  getSharesList(): Array<cs3_sharing_ocm_v1beta1_resources_pb.Share>;
+  setSharesList(value: Array<cs3_sharing_ocm_v1beta1_resources_pb.Share>): void;
+  addShares(value?: cs3_sharing_ocm_v1beta1_resources_pb.Share, index?: number): cs3_sharing_ocm_v1beta1_resources_pb.Share;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListOCMSharesResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListOCMSharesResponse): ListOCMSharesResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListOCMSharesResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListOCMSharesResponse;
+  static deserializeBinaryFromReader(message: ListOCMSharesResponse, reader: jspb.BinaryReader): ListOCMSharesResponse;
+}
+
+export namespace ListOCMSharesResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    sharesList: Array<cs3_sharing_ocm_v1beta1_resources_pb.Share.AsObject>,
+  }
+}
+
+export class RemoveOCMShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_ocm_v1beta1_resources_pb.ShareReference | undefined;
+  setRef(value?: cs3_sharing_ocm_v1beta1_resources_pb.ShareReference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemoveOCMShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: RemoveOCMShareRequest): RemoveOCMShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemoveOCMShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemoveOCMShareRequest;
+  static deserializeBinaryFromReader(message: RemoveOCMShareRequest, reader: jspb.BinaryReader): RemoveOCMShareRequest;
+}
+
+export namespace RemoveOCMShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_ocm_v1beta1_resources_pb.ShareReference.AsObject,
+  }
+}
+
+export class RemoveOCMShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemoveOCMShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: RemoveOCMShareResponse): RemoveOCMShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemoveOCMShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemoveOCMShareResponse;
+  static deserializeBinaryFromReader(message: RemoveOCMShareResponse, reader: jspb.BinaryReader): RemoveOCMShareResponse;
+}
+
+export namespace RemoveOCMShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetOCMShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_ocm_v1beta1_resources_pb.ShareReference | undefined;
+  setRef(value?: cs3_sharing_ocm_v1beta1_resources_pb.ShareReference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetOCMShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetOCMShareRequest): GetOCMShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetOCMShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetOCMShareRequest;
+  static deserializeBinaryFromReader(message: GetOCMShareRequest, reader: jspb.BinaryReader): GetOCMShareRequest;
+}
+
+export namespace GetOCMShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_ocm_v1beta1_resources_pb.ShareReference.AsObject,
+  }
+}
+
+export class GetOCMShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_ocm_v1beta1_resources_pb.Share | undefined;
+  setShare(value?: cs3_sharing_ocm_v1beta1_resources_pb.Share): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetOCMShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetOCMShareResponse): GetOCMShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetOCMShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetOCMShareResponse;
+  static deserializeBinaryFromReader(message: GetOCMShareResponse, reader: jspb.BinaryReader): GetOCMShareResponse;
+}
+
+export namespace GetOCMShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_ocm_v1beta1_resources_pb.Share.AsObject,
+  }
+}
+
+export class ListReceivedOCMSharesRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListReceivedOCMSharesRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListReceivedOCMSharesRequest): ListReceivedOCMSharesRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListReceivedOCMSharesRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListReceivedOCMSharesRequest;
+  static deserializeBinaryFromReader(message: ListReceivedOCMSharesRequest, reader: jspb.BinaryReader): ListReceivedOCMSharesRequest;
+}
+
+export namespace ListReceivedOCMSharesRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class ListReceivedOCMSharesResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearSharesList(): void;
+  getSharesList(): Array<cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare>;
+  setSharesList(value: Array<cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare>): void;
+  addShares(value?: cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare, index?: number): cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListReceivedOCMSharesResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListReceivedOCMSharesResponse): ListReceivedOCMSharesResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListReceivedOCMSharesResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListReceivedOCMSharesResponse;
+  static deserializeBinaryFromReader(message: ListReceivedOCMSharesResponse, reader: jspb.BinaryReader): ListReceivedOCMSharesResponse;
+}
+
+export namespace ListReceivedOCMSharesResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    sharesList: Array<cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare.AsObject>,
+  }
+}
+
+export class UpdateReceivedOCMShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare | undefined;
+  setShare(value?: cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare): void;
+
+  hasUpdateMask(): boolean;
+  clearUpdateMask(): void;
+  getUpdateMask(): google_protobuf_field_mask_pb.FieldMask | undefined;
+  setUpdateMask(value?: google_protobuf_field_mask_pb.FieldMask): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateReceivedOCMShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateReceivedOCMShareRequest): UpdateReceivedOCMShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateReceivedOCMShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateReceivedOCMShareRequest;
+  static deserializeBinaryFromReader(message: UpdateReceivedOCMShareRequest, reader: jspb.BinaryReader): UpdateReceivedOCMShareRequest;
+}
+
+export namespace UpdateReceivedOCMShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare.AsObject,
+    updateMask?: google_protobuf_field_mask_pb.FieldMask.AsObject,
+  }
+}
+
+export class UpdateReceivedOCMShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateReceivedOCMShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateReceivedOCMShareResponse): UpdateReceivedOCMShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateReceivedOCMShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateReceivedOCMShareResponse;
+  static deserializeBinaryFromReader(message: UpdateReceivedOCMShareResponse, reader: jspb.BinaryReader): UpdateReceivedOCMShareResponse;
+}
+
+export namespace UpdateReceivedOCMShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetReceivedOCMShareRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_sharing_ocm_v1beta1_resources_pb.ShareReference | undefined;
+  setRef(value?: cs3_sharing_ocm_v1beta1_resources_pb.ShareReference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetReceivedOCMShareRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetReceivedOCMShareRequest): GetReceivedOCMShareRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetReceivedOCMShareRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetReceivedOCMShareRequest;
+  static deserializeBinaryFromReader(message: GetReceivedOCMShareRequest, reader: jspb.BinaryReader): GetReceivedOCMShareRequest;
+}
+
+export namespace GetReceivedOCMShareRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_sharing_ocm_v1beta1_resources_pb.ShareReference.AsObject,
+  }
+}
+
+export class GetReceivedOCMShareResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare | undefined;
+  setShare(value?: cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetReceivedOCMShareResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetReceivedOCMShareResponse): GetReceivedOCMShareResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetReceivedOCMShareResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetReceivedOCMShareResponse;
+  static deserializeBinaryFromReader(message: GetReceivedOCMShareResponse, reader: jspb.BinaryReader): GetReceivedOCMShareResponse;
+}
+
+export namespace GetReceivedOCMShareResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    share?: cs3_sharing_ocm_v1beta1_resources_pb.ReceivedShare.AsObject,
+  }
+}
+
diff --git a/cs3/sharing/ocm/v1beta1/resources_pb.d.ts b/cs3/sharing/ocm/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..f9bc4cb
--- /dev/null
+++ b/cs3/sharing/ocm/v1beta1/resources_pb.d.ts
@@ -0,0 +1,268 @@
+// package: cs3.sharing.ocm.v1beta1
+// file: cs3/sharing/ocm/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class Share extends jspb.Message {
+  hasId(): boolean;
+  clearId(): void;
+  getId(): ShareId | undefined;
+  setId(value?: ShareId): void;
+
+  hasResourceId(): boolean;
+  clearResourceId(): void;
+  getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+  setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+  getName(): string;
+  setName(value: string): void;
+
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): SharePermissions | undefined;
+  setPermissions(value?: SharePermissions): void;
+
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): cs3_storage_provider_v1beta1_resources_pb.Grantee | undefined;
+  setGrantee(value?: cs3_storage_provider_v1beta1_resources_pb.Grantee): void;
+
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasCreator(): boolean;
+  clearCreator(): void;
+  getCreator(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setCreator(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasCtime(): boolean;
+  clearCtime(): void;
+  getCtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setCtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasMtime(): boolean;
+  clearMtime(): void;
+  getMtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setMtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  getShareType(): Share.ShareType;
+  setShareType(value: Share.ShareType): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Share.AsObject;
+  static toObject(includeInstance: boolean, msg: Share): Share.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Share, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Share;
+  static deserializeBinaryFromReader(message: Share, reader: jspb.BinaryReader): Share;
+}
+
+export namespace Share {
+  export type AsObject = {
+    id?: ShareId.AsObject,
+    resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+    name: string,
+    permissions?: SharePermissions.AsObject,
+    grantee?: cs3_storage_provider_v1beta1_resources_pb.Grantee.AsObject,
+    owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    creator?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    ctime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    mtime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    shareType: Share.ShareType,
+  }
+
+  export enum ShareType {
+    SHARE_TYPE_INVALID = 0,
+    SHARE_TYPE_REGULAR = 1,
+    SHARE_TYPE_TRANSFER = 2,
+  }
+}
+
+export class SharePermissions extends jspb.Message {
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): cs3_storage_provider_v1beta1_resources_pb.ResourcePermissions | undefined;
+  setPermissions(value?: cs3_storage_provider_v1beta1_resources_pb.ResourcePermissions): void;
+
+  getReshare(): boolean;
+  setReshare(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): SharePermissions.AsObject;
+  static toObject(includeInstance: boolean, msg: SharePermissions): SharePermissions.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: SharePermissions, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): SharePermissions;
+  static deserializeBinaryFromReader(message: SharePermissions, reader: jspb.BinaryReader): SharePermissions;
+}
+
+export namespace SharePermissions {
+  export type AsObject = {
+    permissions?: cs3_storage_provider_v1beta1_resources_pb.ResourcePermissions.AsObject,
+    reshare: boolean,
+  }
+}
+
+export class ReceivedShare extends jspb.Message {
+  hasShare(): boolean;
+  clearShare(): void;
+  getShare(): Share | undefined;
+  setShare(value?: Share): void;
+
+  getState(): ShareState;
+  setState(value: ShareState): void;
+
+  hasMountPoint(): boolean;
+  clearMountPoint(): void;
+  getMountPoint(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setMountPoint(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ReceivedShare.AsObject;
+  static toObject(includeInstance: boolean, msg: ReceivedShare): ReceivedShare.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ReceivedShare, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ReceivedShare;
+  static deserializeBinaryFromReader(message: ReceivedShare, reader: jspb.BinaryReader): ReceivedShare;
+}
+
+export namespace ReceivedShare {
+  export type AsObject = {
+    share?: Share.AsObject,
+    state: ShareState,
+    mountPoint?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class ShareKey extends jspb.Message {
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasResourceId(): boolean;
+  clearResourceId(): void;
+  getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+  setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): cs3_storage_provider_v1beta1_resources_pb.Grantee | undefined;
+  setGrantee(value?: cs3_storage_provider_v1beta1_resources_pb.Grantee): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ShareKey.AsObject;
+  static toObject(includeInstance: boolean, msg: ShareKey): ShareKey.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ShareKey, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ShareKey;
+  static deserializeBinaryFromReader(message: ShareKey, reader: jspb.BinaryReader): ShareKey;
+}
+
+export namespace ShareKey {
+  export type AsObject = {
+    owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+    grantee?: cs3_storage_provider_v1beta1_resources_pb.Grantee.AsObject,
+  }
+}
+
+export class ShareId extends jspb.Message {
+  getOpaqueId(): string;
+  setOpaqueId(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ShareId.AsObject;
+  static toObject(includeInstance: boolean, msg: ShareId): ShareId.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ShareId, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ShareId;
+  static deserializeBinaryFromReader(message: ShareId, reader: jspb.BinaryReader): ShareId;
+}
+
+export namespace ShareId {
+  export type AsObject = {
+    opaqueId: string,
+  }
+}
+
+export class ShareReference extends jspb.Message {
+  hasId(): boolean;
+  clearId(): void;
+  getId(): ShareId | undefined;
+  setId(value?: ShareId): void;
+
+  hasKey(): boolean;
+  clearKey(): void;
+  getKey(): ShareKey | undefined;
+  setKey(value?: ShareKey): void;
+
+  getSpecCase(): ShareReference.SpecCase;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ShareReference.AsObject;
+  static toObject(includeInstance: boolean, msg: ShareReference): ShareReference.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ShareReference, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ShareReference;
+  static deserializeBinaryFromReader(message: ShareReference, reader: jspb.BinaryReader): ShareReference;
+}
+
+export namespace ShareReference {
+  export type AsObject = {
+    id?: ShareId.AsObject,
+    key?: ShareKey.AsObject,
+  }
+
+  export enum SpecCase {
+    SPEC_NOT_SET = 0,
+    ID = 1,
+    KEY = 2,
+  }
+}
+
+export class ShareGrant extends jspb.Message {
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): cs3_storage_provider_v1beta1_resources_pb.Grantee | undefined;
+  setGrantee(value?: cs3_storage_provider_v1beta1_resources_pb.Grantee): void;
+
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): SharePermissions | undefined;
+  setPermissions(value?: SharePermissions): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ShareGrant.AsObject;
+  static toObject(includeInstance: boolean, msg: ShareGrant): ShareGrant.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ShareGrant, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ShareGrant;
+  static deserializeBinaryFromReader(message: ShareGrant, reader: jspb.BinaryReader): ShareGrant;
+}
+
+export namespace ShareGrant {
+  export type AsObject = {
+    grantee?: cs3_storage_provider_v1beta1_resources_pb.Grantee.AsObject,
+    permissions?: SharePermissions.AsObject,
+  }
+}
+
+export enum ShareState {
+  SHARE_STATE_INVALID = 0,
+  SHARE_STATE_PENDING = 1,
+  SHARE_STATE_ACCEPTED = 2,
+  SHARE_STATE_REJECTED = 3,
+}
+
diff --git a/cs3/storage/provider/v1beta1/provider_api_grpc_pb.d.ts b/cs3/storage/provider/v1beta1/provider_api_grpc_pb.d.ts
new file mode 100644
index 0000000..548ac38
--- /dev/null
+++ b/cs3/storage/provider/v1beta1/provider_api_grpc_pb.d.ts
@@ -0,0 +1,578 @@
+// package: cs3.storage.provider.v1beta1
+// file: cs3/storage/provider/v1beta1/provider_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_storage_provider_v1beta1_provider_api_pb from '../../../../cs3/storage/provider/v1beta1/provider_api_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IProviderAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  addGrant: IProviderAPIService_IAddGrant;
+  createContainer: IProviderAPIService_ICreateContainer;
+  delete: IProviderAPIService_IDelete;
+  denyGrant: IProviderAPIService_IDenyGrant;
+  getPath: IProviderAPIService_IGetPath;
+  getQuota: IProviderAPIService_IGetQuota;
+  initiateFileDownload: IProviderAPIService_IInitiateFileDownload;
+  initiateFileUpload: IProviderAPIService_IInitiateFileUpload;
+  listGrants: IProviderAPIService_IListGrants;
+  listContainerStream: IProviderAPIService_IListContainerStream;
+  listContainer: IProviderAPIService_IListContainer;
+  listFileVersions: IProviderAPIService_IListFileVersions;
+  listRecycleStream: IProviderAPIService_IListRecycleStream;
+  listRecycle: IProviderAPIService_IListRecycle;
+  move: IProviderAPIService_IMove;
+  removeGrant: IProviderAPIService_IRemoveGrant;
+  purgeRecycle: IProviderAPIService_IPurgeRecycle;
+  restoreFileVersion: IProviderAPIService_IRestoreFileVersion;
+  restoreRecycleItem: IProviderAPIService_IRestoreRecycleItem;
+  stat: IProviderAPIService_IStat;
+  updateGrant: IProviderAPIService_IUpdateGrant;
+  createSymlink: IProviderAPIService_ICreateSymlink;
+  createReference: IProviderAPIService_ICreateReference;
+  setArbitraryMetadata: IProviderAPIService_ISetArbitraryMetadata;
+  unsetArbitraryMetadata: IProviderAPIService_IUnsetArbitraryMetadata;
+  createHome: IProviderAPIService_ICreateHome;
+  getHome: IProviderAPIService_IGetHome;
+  createStorageSpace: IProviderAPIService_ICreateStorageSpace;
+  listStorageSpaces: IProviderAPIService_IListStorageSpaces;
+  updateStorageSpace: IProviderAPIService_IUpdateStorageSpace;
+  deleteStorageSpace: IProviderAPIService_IDeleteStorageSpace;
+}
+
+interface IProviderAPIService_IAddGrant extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest, cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/AddGrant'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse>;
+}
+
+interface IProviderAPIService_ICreateContainer extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/CreateContainer'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse>;
+}
+
+interface IProviderAPIService_IDelete extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/Delete'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse>;
+}
+
+interface IProviderAPIService_IDenyGrant extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest, cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/DenyGrant'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse>;
+}
+
+interface IProviderAPIService_IGetPath extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/GetPath'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse>;
+}
+
+interface IProviderAPIService_IGetQuota extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/GetQuota'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse>;
+}
+
+interface IProviderAPIService_IInitiateFileDownload extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/InitiateFileDownload'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse>;
+}
+
+interface IProviderAPIService_IInitiateFileUpload extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/InitiateFileUpload'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse>;
+}
+
+interface IProviderAPIService_IListGrants extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/ListGrants'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse>;
+}
+
+interface IProviderAPIService_IListContainerStream extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/ListContainerStream'
+  requestStream: false
+  responseStream: true
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+}
+
+interface IProviderAPIService_IListContainer extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/ListContainer'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse>;
+}
+
+interface IProviderAPIService_IListFileVersions extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/ListFileVersions'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse>;
+}
+
+interface IProviderAPIService_IListRecycleStream extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/ListRecycleStream'
+  requestStream: false
+  responseStream: true
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+}
+
+interface IProviderAPIService_IListRecycle extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/ListRecycle'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
+}
+
+interface IProviderAPIService_IMove extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/Move'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse>;
+}
+
+interface IProviderAPIService_IRemoveGrant extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest, cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/RemoveGrant'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse>;
+}
+
+interface IProviderAPIService_IPurgeRecycle extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/PurgeRecycle'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
+}
+
+interface IProviderAPIService_IRestoreFileVersion extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/RestoreFileVersion'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse>;
+}
+
+interface IProviderAPIService_IRestoreRecycleItem extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/RestoreRecycleItem'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse>;
+}
+
+interface IProviderAPIService_IStat extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, cs3_storage_provider_v1beta1_provider_api_pb.StatResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/Stat'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.StatRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.StatRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.StatResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.StatResponse>;
+}
+
+interface IProviderAPIService_IUpdateGrant extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest, cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/UpdateGrant'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse>;
+}
+
+interface IProviderAPIService_ICreateSymlink extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/CreateSymlink'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse>;
+}
+
+interface IProviderAPIService_ICreateReference extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/CreateReference'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse>;
+}
+
+interface IProviderAPIService_ISetArbitraryMetadata extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/SetArbitraryMetadata'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse>;
+}
+
+interface IProviderAPIService_IUnsetArbitraryMetadata extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/UnsetArbitraryMetadata'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse>;
+}
+
+interface IProviderAPIService_ICreateHome extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/CreateHome'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse>;
+}
+
+interface IProviderAPIService_IGetHome extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/GetHome'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse>;
+}
+
+interface IProviderAPIService_ICreateStorageSpace extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/CreateStorageSpace'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse>;
+}
+
+interface IProviderAPIService_IListStorageSpaces extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/ListStorageSpaces'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse>;
+}
+
+interface IProviderAPIService_IUpdateStorageSpace extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/UpdateStorageSpace'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse>;
+}
+
+interface IProviderAPIService_IDeleteStorageSpace extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse> {
+  path: '/cs3.storage.provider.v1beta1.ProviderAPI/DeleteStorageSpace'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse>;
+}
+
+export const ProviderAPIService: IProviderAPIService;
+export interface IProviderAPIServer extends grpc.UntypedServiceImplementation {
+  addGrant: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest, cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse>;
+  createContainer: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse>;
+  delete: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse>;
+  denyGrant: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest, cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse>;
+  getPath: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse>;
+  getQuota: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse>;
+  initiateFileDownload: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse>;
+  initiateFileUpload: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse>;
+  listGrants: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse>;
+  listContainerStream: grpc.handleServerStreamingCall<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  listContainer: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse>;
+  listFileVersions: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse>;
+  listRecycleStream: grpc.handleServerStreamingCall<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  listRecycle: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
+  move: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse>;
+  removeGrant: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest, cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse>;
+  purgeRecycle: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
+  restoreFileVersion: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse>;
+  restoreRecycleItem: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse>;
+  stat: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, cs3_storage_provider_v1beta1_provider_api_pb.StatResponse>;
+  updateGrant: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest, cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse>;
+  createSymlink: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse>;
+  createReference: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse>;
+  setArbitraryMetadata: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse>;
+  unsetArbitraryMetadata: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse>;
+  createHome: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse>;
+  getHome: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse>;
+  createStorageSpace: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse>;
+  listStorageSpaces: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse>;
+  updateStorageSpace: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse>;
+  deleteStorageSpace: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse>;
+}
+
+export interface IProviderAPIClient {
+  addGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse) => void): grpc.ClientUnaryCall;
+  addGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse) => void): grpc.ClientUnaryCall;
+  addGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse) => void): grpc.ClientUnaryCall;
+  createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  denyGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse) => void): grpc.ClientUnaryCall;
+  denyGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse) => void): grpc.ClientUnaryCall;
+  denyGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse) => void): grpc.ClientUnaryCall;
+  getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  getQuota(request: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  getQuota(request: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  getQuota(request: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  listGrants(request: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse) => void): grpc.ClientUnaryCall;
+  listGrants(request: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse) => void): grpc.ClientUnaryCall;
+  listGrants(request: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse) => void): grpc.ClientUnaryCall;
+  listContainerStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  listContainerStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  listRecycleStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  listRecycleStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  removeGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse) => void): grpc.ClientUnaryCall;
+  removeGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse) => void): grpc.ClientUnaryCall;
+  removeGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse) => void): grpc.ClientUnaryCall;
+  purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  updateGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse) => void): grpc.ClientUnaryCall;
+  updateGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse) => void): grpc.ClientUnaryCall;
+  updateGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse) => void): grpc.ClientUnaryCall;
+  createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  createReference(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse) => void): grpc.ClientUnaryCall;
+  createReference(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse) => void): grpc.ClientUnaryCall;
+  createReference(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse) => void): grpc.ClientUnaryCall;
+  setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class ProviderAPIClient extends grpc.Client implements IProviderAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public addGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse) => void): grpc.ClientUnaryCall;
+  public addGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse) => void): grpc.ClientUnaryCall;
+  public addGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.AddGrantResponse) => void): grpc.ClientUnaryCall;
+  public createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  public createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  public createContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateContainerResponse) => void): grpc.ClientUnaryCall;
+  public delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  public delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  public delete(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteResponse) => void): grpc.ClientUnaryCall;
+  public denyGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse) => void): grpc.ClientUnaryCall;
+  public denyGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse) => void): grpc.ClientUnaryCall;
+  public denyGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DenyGrantResponse) => void): grpc.ClientUnaryCall;
+  public getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  public getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  public getPath(request: cs3_storage_provider_v1beta1_provider_api_pb.GetPathRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetPathResponse) => void): grpc.ClientUnaryCall;
+  public getQuota(request: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  public getQuota(request: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  public getQuota(request: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetQuotaResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileDownload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileDownloadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  public initiateFileUpload(request: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.InitiateFileUploadResponse) => void): grpc.ClientUnaryCall;
+  public listGrants(request: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse) => void): grpc.ClientUnaryCall;
+  public listGrants(request: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse) => void): grpc.ClientUnaryCall;
+  public listGrants(request: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListGrantsResponse) => void): grpc.ClientUnaryCall;
+  public listContainerStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  public listContainerStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
+  public listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  public listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  public listContainer(request: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse) => void): grpc.ClientUnaryCall;
+  public listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  public listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  public listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
+  public listRecycleStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  public listRecycleStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  public listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  public listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  public listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  public move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  public move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  public move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
+  public removeGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse) => void): grpc.ClientUnaryCall;
+  public removeGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse) => void): grpc.ClientUnaryCall;
+  public removeGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RemoveGrantResponse) => void): grpc.ClientUnaryCall;
+  public purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  public purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  public purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  public restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  public restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  public restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
+  public restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  public restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  public restoreRecycleItem(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse) => void): grpc.ClientUnaryCall;
+  public stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  public stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  public stat(request: cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.StatResponse) => void): grpc.ClientUnaryCall;
+  public updateGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse) => void): grpc.ClientUnaryCall;
+  public updateGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse) => void): grpc.ClientUnaryCall;
+  public updateGrant(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateGrantResponse) => void): grpc.ClientUnaryCall;
+  public createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  public createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  public createSymlink(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateSymlinkResponse) => void): grpc.ClientUnaryCall;
+  public createReference(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse) => void): grpc.ClientUnaryCall;
+  public createReference(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse) => void): grpc.ClientUnaryCall;
+  public createReference(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateReferenceResponse) => void): grpc.ClientUnaryCall;
+  public setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public setArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.SetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public unsetArbitraryMetadata(request: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UnsetArbitraryMetadataResponse) => void): grpc.ClientUnaryCall;
+  public createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  public createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  public createHome(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateHomeResponse) => void): grpc.ClientUnaryCall;
+  public getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  public getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  public getHome(request: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  public createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public createStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.CreateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  public listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  public listStorageSpaces(request: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListStorageSpacesResponse) => void): grpc.ClientUnaryCall;
+  public updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public updateStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.UpdateStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+  public deleteStorageSpace(request: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.DeleteStorageSpaceResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/storage/provider/v1beta1/provider_api_grpc_pb.js b/cs3/storage/provider/v1beta1/provider_api_grpc_pb.js
index be1355b..fa6ad60 100644
--- a/cs3/storage/provider/v1beta1/provider_api_grpc_pb.js
+++ b/cs3/storage/provider/v1beta1/provider_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_storage_provider_v1beta1_provider_api_pb = require('../../../../cs3/storage/provider/v1beta1/provider_api_pb.js');
 var cs3_identity_user_v1beta1_resources_pb = require('../../../../cs3/identity/user/v1beta1/resources_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
diff --git a/cs3/storage/provider/v1beta1/provider_api_pb.d.ts b/cs3/storage/provider/v1beta1/provider_api_pb.d.ts
new file mode 100644
index 0000000..6ff1b9e
--- /dev/null
+++ b/cs3/storage/provider/v1beta1/provider_api_pb.d.ts
@@ -0,0 +1,2014 @@
+// package: cs3.storage.provider.v1beta1
+// file: cs3/storage/provider/v1beta1/provider_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class GetHomeRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetHomeRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetHomeRequest): GetHomeRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetHomeRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetHomeRequest;
+  static deserializeBinaryFromReader(message: GetHomeRequest, reader: jspb.BinaryReader): GetHomeRequest;
+}
+
+export namespace GetHomeRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetHomeResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getPath(): string;
+  setPath(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetHomeResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetHomeResponse): GetHomeResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetHomeResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetHomeResponse;
+  static deserializeBinaryFromReader(message: GetHomeResponse, reader: jspb.BinaryReader): GetHomeResponse;
+}
+
+export namespace GetHomeResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    path: string,
+  }
+}
+
+export class AddGrantRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasGrant(): boolean;
+  clearGrant(): void;
+  getGrant(): cs3_storage_provider_v1beta1_resources_pb.Grant | undefined;
+  setGrant(value?: cs3_storage_provider_v1beta1_resources_pb.Grant): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AddGrantRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: AddGrantRequest): AddGrantRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AddGrantRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AddGrantRequest;
+  static deserializeBinaryFromReader(message: AddGrantRequest, reader: jspb.BinaryReader): AddGrantRequest;
+}
+
+export namespace AddGrantRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    grant?: cs3_storage_provider_v1beta1_resources_pb.Grant.AsObject,
+  }
+}
+
+export class AddGrantResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): AddGrantResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: AddGrantResponse): AddGrantResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: AddGrantResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): AddGrantResponse;
+  static deserializeBinaryFromReader(message: AddGrantResponse, reader: jspb.BinaryReader): AddGrantResponse;
+}
+
+export namespace AddGrantResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class DenyGrantRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): cs3_storage_provider_v1beta1_resources_pb.Grantee | undefined;
+  setGrantee(value?: cs3_storage_provider_v1beta1_resources_pb.Grantee): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DenyGrantRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: DenyGrantRequest): DenyGrantRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DenyGrantRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DenyGrantRequest;
+  static deserializeBinaryFromReader(message: DenyGrantRequest, reader: jspb.BinaryReader): DenyGrantRequest;
+}
+
+export namespace DenyGrantRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    grantee?: cs3_storage_provider_v1beta1_resources_pb.Grantee.AsObject,
+  }
+}
+
+export class DenyGrantResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DenyGrantResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: DenyGrantResponse): DenyGrantResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DenyGrantResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DenyGrantResponse;
+  static deserializeBinaryFromReader(message: DenyGrantResponse, reader: jspb.BinaryReader): DenyGrantResponse;
+}
+
+export namespace DenyGrantResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class CreateContainerRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateContainerRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateContainerRequest): CreateContainerRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateContainerRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateContainerRequest;
+  static deserializeBinaryFromReader(message: CreateContainerRequest, reader: jspb.BinaryReader): CreateContainerRequest;
+}
+
+export namespace CreateContainerRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class CreateContainerResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateContainerResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateContainerResponse): CreateContainerResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateContainerResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateContainerResponse;
+  static deserializeBinaryFromReader(message: CreateContainerResponse, reader: jspb.BinaryReader): CreateContainerResponse;
+}
+
+export namespace CreateContainerResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class DeleteRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DeleteRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: DeleteRequest): DeleteRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DeleteRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DeleteRequest;
+  static deserializeBinaryFromReader(message: DeleteRequest, reader: jspb.BinaryReader): DeleteRequest;
+}
+
+export namespace DeleteRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class DeleteResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DeleteResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: DeleteResponse): DeleteResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DeleteResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DeleteResponse;
+  static deserializeBinaryFromReader(message: DeleteResponse, reader: jspb.BinaryReader): DeleteResponse;
+}
+
+export namespace DeleteResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetPathRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasResourceId(): boolean;
+  clearResourceId(): void;
+  getResourceId(): cs3_storage_provider_v1beta1_resources_pb.ResourceId | undefined;
+  setResourceId(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetPathRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetPathRequest): GetPathRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetPathRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetPathRequest;
+  static deserializeBinaryFromReader(message: GetPathRequest, reader: jspb.BinaryReader): GetPathRequest;
+}
+
+export namespace GetPathRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    resourceId?: cs3_storage_provider_v1beta1_resources_pb.ResourceId.AsObject,
+  }
+}
+
+export class GetPathResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getPath(): string;
+  setPath(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetPathResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetPathResponse): GetPathResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetPathResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetPathResponse;
+  static deserializeBinaryFromReader(message: GetPathResponse, reader: jspb.BinaryReader): GetPathResponse;
+}
+
+export namespace GetPathResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    path: string,
+  }
+}
+
+export class GetQuotaRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetQuotaRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetQuotaRequest): GetQuotaRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetQuotaRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetQuotaRequest;
+  static deserializeBinaryFromReader(message: GetQuotaRequest, reader: jspb.BinaryReader): GetQuotaRequest;
+}
+
+export namespace GetQuotaRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class GetQuotaResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getTotalBytes(): number;
+  setTotalBytes(value: number): void;
+
+  getUsedBytes(): number;
+  setUsedBytes(value: number): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetQuotaResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetQuotaResponse): GetQuotaResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetQuotaResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetQuotaResponse;
+  static deserializeBinaryFromReader(message: GetQuotaResponse, reader: jspb.BinaryReader): GetQuotaResponse;
+}
+
+export namespace GetQuotaResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    totalBytes: number,
+    usedBytes: number,
+  }
+}
+
+export class InitiateFileUploadRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasIfNotExist(): boolean;
+  clearIfNotExist(): void;
+  getIfNotExist(): boolean;
+  setIfNotExist(value: boolean): void;
+
+  hasIfMatch(): boolean;
+  clearIfMatch(): void;
+  getIfMatch(): string;
+  setIfMatch(value: string): void;
+
+  getOptionsCase(): InitiateFileUploadRequest.OptionsCase;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): InitiateFileUploadRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: InitiateFileUploadRequest): InitiateFileUploadRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: InitiateFileUploadRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): InitiateFileUploadRequest;
+  static deserializeBinaryFromReader(message: InitiateFileUploadRequest, reader: jspb.BinaryReader): InitiateFileUploadRequest;
+}
+
+export namespace InitiateFileUploadRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    ifNotExist: boolean,
+    ifMatch: string,
+  }
+
+  export enum OptionsCase {
+    OPTIONS_NOT_SET = 0,
+    IF_NOT_EXIST = 3,
+    IF_MATCH = 4,
+  }
+}
+
+export class InitiateFileUploadResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProtocolsList(): void;
+  getProtocolsList(): Array<cs3_storage_provider_v1beta1_resources_pb.FileUploadProtocol>;
+  setProtocolsList(value: Array<cs3_storage_provider_v1beta1_resources_pb.FileUploadProtocol>): void;
+  addProtocols(value?: cs3_storage_provider_v1beta1_resources_pb.FileUploadProtocol, index?: number): cs3_storage_provider_v1beta1_resources_pb.FileUploadProtocol;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): InitiateFileUploadResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: InitiateFileUploadResponse): InitiateFileUploadResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: InitiateFileUploadResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): InitiateFileUploadResponse;
+  static deserializeBinaryFromReader(message: InitiateFileUploadResponse, reader: jspb.BinaryReader): InitiateFileUploadResponse;
+}
+
+export namespace InitiateFileUploadResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    protocolsList: Array<cs3_storage_provider_v1beta1_resources_pb.FileUploadProtocol.AsObject>,
+  }
+}
+
+export class InitiateFileDownloadRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): InitiateFileDownloadRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: InitiateFileDownloadRequest): InitiateFileDownloadRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: InitiateFileDownloadRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): InitiateFileDownloadRequest;
+  static deserializeBinaryFromReader(message: InitiateFileDownloadRequest, reader: jspb.BinaryReader): InitiateFileDownloadRequest;
+}
+
+export namespace InitiateFileDownloadRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class InitiateFileDownloadResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProtocolsList(): void;
+  getProtocolsList(): Array<cs3_storage_provider_v1beta1_resources_pb.FileDownloadProtocol>;
+  setProtocolsList(value: Array<cs3_storage_provider_v1beta1_resources_pb.FileDownloadProtocol>): void;
+  addProtocols(value?: cs3_storage_provider_v1beta1_resources_pb.FileDownloadProtocol, index?: number): cs3_storage_provider_v1beta1_resources_pb.FileDownloadProtocol;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): InitiateFileDownloadResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: InitiateFileDownloadResponse): InitiateFileDownloadResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: InitiateFileDownloadResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): InitiateFileDownloadResponse;
+  static deserializeBinaryFromReader(message: InitiateFileDownloadResponse, reader: jspb.BinaryReader): InitiateFileDownloadResponse;
+}
+
+export namespace InitiateFileDownloadResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    protocolsList: Array<cs3_storage_provider_v1beta1_resources_pb.FileDownloadProtocol.AsObject>,
+  }
+}
+
+export class ListGrantsRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListGrantsRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListGrantsRequest): ListGrantsRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListGrantsRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListGrantsRequest;
+  static deserializeBinaryFromReader(message: ListGrantsRequest, reader: jspb.BinaryReader): ListGrantsRequest;
+}
+
+export namespace ListGrantsRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class ListGrantsResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearGrantsList(): void;
+  getGrantsList(): Array<cs3_storage_provider_v1beta1_resources_pb.Grant>;
+  setGrantsList(value: Array<cs3_storage_provider_v1beta1_resources_pb.Grant>): void;
+  addGrants(value?: cs3_storage_provider_v1beta1_resources_pb.Grant, index?: number): cs3_storage_provider_v1beta1_resources_pb.Grant;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListGrantsResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListGrantsResponse): ListGrantsResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListGrantsResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListGrantsResponse;
+  static deserializeBinaryFromReader(message: ListGrantsResponse, reader: jspb.BinaryReader): ListGrantsResponse;
+}
+
+export namespace ListGrantsResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    grantsList: Array<cs3_storage_provider_v1beta1_resources_pb.Grant.AsObject>,
+  }
+}
+
+export class ListContainerStreamRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  clearArbitraryMetadataKeysList(): void;
+  getArbitraryMetadataKeysList(): Array<string>;
+  setArbitraryMetadataKeysList(value: Array<string>): void;
+  addArbitraryMetadataKeys(value: string, index?: number): string;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListContainerStreamRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListContainerStreamRequest): ListContainerStreamRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListContainerStreamRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListContainerStreamRequest;
+  static deserializeBinaryFromReader(message: ListContainerStreamRequest, reader: jspb.BinaryReader): ListContainerStreamRequest;
+}
+
+export namespace ListContainerStreamRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    arbitraryMetadataKeysList: Array<string>,
+  }
+}
+
+export class ListContainerStreamResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasInfo(): boolean;
+  clearInfo(): void;
+  getInfo(): cs3_storage_provider_v1beta1_resources_pb.ResourceInfo | undefined;
+  setInfo(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListContainerStreamResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListContainerStreamResponse): ListContainerStreamResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListContainerStreamResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListContainerStreamResponse;
+  static deserializeBinaryFromReader(message: ListContainerStreamResponse, reader: jspb.BinaryReader): ListContainerStreamResponse;
+}
+
+export namespace ListContainerStreamResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    info?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo.AsObject,
+  }
+}
+
+export class ListContainerRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  clearArbitraryMetadataKeysList(): void;
+  getArbitraryMetadataKeysList(): Array<string>;
+  setArbitraryMetadataKeysList(value: Array<string>): void;
+  addArbitraryMetadataKeys(value: string, index?: number): string;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListContainerRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListContainerRequest): ListContainerRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListContainerRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListContainerRequest;
+  static deserializeBinaryFromReader(message: ListContainerRequest, reader: jspb.BinaryReader): ListContainerRequest;
+}
+
+export namespace ListContainerRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    arbitraryMetadataKeysList: Array<string>,
+  }
+}
+
+export class ListContainerResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearInfosList(): void;
+  getInfosList(): Array<cs3_storage_provider_v1beta1_resources_pb.ResourceInfo>;
+  setInfosList(value: Array<cs3_storage_provider_v1beta1_resources_pb.ResourceInfo>): void;
+  addInfos(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo, index?: number): cs3_storage_provider_v1beta1_resources_pb.ResourceInfo;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListContainerResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListContainerResponse): ListContainerResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListContainerResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListContainerResponse;
+  static deserializeBinaryFromReader(message: ListContainerResponse, reader: jspb.BinaryReader): ListContainerResponse;
+}
+
+export namespace ListContainerResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    infosList: Array<cs3_storage_provider_v1beta1_resources_pb.ResourceInfo.AsObject>,
+  }
+}
+
+export class ListFileVersionsRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListFileVersionsRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListFileVersionsRequest): ListFileVersionsRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListFileVersionsRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListFileVersionsRequest;
+  static deserializeBinaryFromReader(message: ListFileVersionsRequest, reader: jspb.BinaryReader): ListFileVersionsRequest;
+}
+
+export namespace ListFileVersionsRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class ListFileVersionsResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearVersionsList(): void;
+  getVersionsList(): Array<cs3_storage_provider_v1beta1_resources_pb.FileVersion>;
+  setVersionsList(value: Array<cs3_storage_provider_v1beta1_resources_pb.FileVersion>): void;
+  addVersions(value?: cs3_storage_provider_v1beta1_resources_pb.FileVersion, index?: number): cs3_storage_provider_v1beta1_resources_pb.FileVersion;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListFileVersionsResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListFileVersionsResponse): ListFileVersionsResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListFileVersionsResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListFileVersionsResponse;
+  static deserializeBinaryFromReader(message: ListFileVersionsResponse, reader: jspb.BinaryReader): ListFileVersionsResponse;
+}
+
+export namespace ListFileVersionsResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    versionsList: Array<cs3_storage_provider_v1beta1_resources_pb.FileVersion.AsObject>,
+  }
+}
+
+export class ListRecycleRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasFromTs(): boolean;
+  clearFromTs(): void;
+  getFromTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setFromTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasToTs(): boolean;
+  clearToTs(): void;
+  getToTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setToTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListRecycleRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListRecycleRequest): ListRecycleRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListRecycleRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListRecycleRequest;
+  static deserializeBinaryFromReader(message: ListRecycleRequest, reader: jspb.BinaryReader): ListRecycleRequest;
+}
+
+export namespace ListRecycleRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    fromTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    toTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class ListRecycleResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearRecycleItemsList(): void;
+  getRecycleItemsList(): Array<cs3_storage_provider_v1beta1_resources_pb.RecycleItem>;
+  setRecycleItemsList(value: Array<cs3_storage_provider_v1beta1_resources_pb.RecycleItem>): void;
+  addRecycleItems(value?: cs3_storage_provider_v1beta1_resources_pb.RecycleItem, index?: number): cs3_storage_provider_v1beta1_resources_pb.RecycleItem;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListRecycleResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListRecycleResponse): ListRecycleResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListRecycleResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListRecycleResponse;
+  static deserializeBinaryFromReader(message: ListRecycleResponse, reader: jspb.BinaryReader): ListRecycleResponse;
+}
+
+export namespace ListRecycleResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    recycleItemsList: Array<cs3_storage_provider_v1beta1_resources_pb.RecycleItem.AsObject>,
+  }
+}
+
+export class ListRecycleStreamRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasFromTs(): boolean;
+  clearFromTs(): void;
+  getFromTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setFromTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasToTs(): boolean;
+  clearToTs(): void;
+  getToTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setToTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListRecycleStreamRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListRecycleStreamRequest): ListRecycleStreamRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListRecycleStreamRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListRecycleStreamRequest;
+  static deserializeBinaryFromReader(message: ListRecycleStreamRequest, reader: jspb.BinaryReader): ListRecycleStreamRequest;
+}
+
+export namespace ListRecycleStreamRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    fromTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    toTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class ListRecycleStreamResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRecycleItem(): boolean;
+  clearRecycleItem(): void;
+  getRecycleItem(): cs3_storage_provider_v1beta1_resources_pb.RecycleItem | undefined;
+  setRecycleItem(value?: cs3_storage_provider_v1beta1_resources_pb.RecycleItem): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListRecycleStreamResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListRecycleStreamResponse): ListRecycleStreamResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListRecycleStreamResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListRecycleStreamResponse;
+  static deserializeBinaryFromReader(message: ListRecycleStreamResponse, reader: jspb.BinaryReader): ListRecycleStreamResponse;
+}
+
+export namespace ListRecycleStreamResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    recycleItem?: cs3_storage_provider_v1beta1_resources_pb.RecycleItem.AsObject,
+  }
+}
+
+export class MoveRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasSource(): boolean;
+  clearSource(): void;
+  getSource(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setSource(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasDestination(): boolean;
+  clearDestination(): void;
+  getDestination(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setDestination(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): MoveRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: MoveRequest): MoveRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: MoveRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): MoveRequest;
+  static deserializeBinaryFromReader(message: MoveRequest, reader: jspb.BinaryReader): MoveRequest;
+}
+
+export namespace MoveRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    source?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    destination?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class MoveResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): MoveResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: MoveResponse): MoveResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: MoveResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): MoveResponse;
+  static deserializeBinaryFromReader(message: MoveResponse, reader: jspb.BinaryReader): MoveResponse;
+}
+
+export namespace MoveResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class PurgeRecycleRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): PurgeRecycleRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: PurgeRecycleRequest): PurgeRecycleRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: PurgeRecycleRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): PurgeRecycleRequest;
+  static deserializeBinaryFromReader(message: PurgeRecycleRequest, reader: jspb.BinaryReader): PurgeRecycleRequest;
+}
+
+export namespace PurgeRecycleRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class PurgeRecycleResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): PurgeRecycleResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: PurgeRecycleResponse): PurgeRecycleResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: PurgeRecycleResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): PurgeRecycleResponse;
+  static deserializeBinaryFromReader(message: PurgeRecycleResponse, reader: jspb.BinaryReader): PurgeRecycleResponse;
+}
+
+export namespace PurgeRecycleResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class RestoreFileVersionRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  getKey(): string;
+  setKey(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RestoreFileVersionRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: RestoreFileVersionRequest): RestoreFileVersionRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RestoreFileVersionRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RestoreFileVersionRequest;
+  static deserializeBinaryFromReader(message: RestoreFileVersionRequest, reader: jspb.BinaryReader): RestoreFileVersionRequest;
+}
+
+export namespace RestoreFileVersionRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    key: string,
+  }
+}
+
+export class RestoreFileVersionResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RestoreFileVersionResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: RestoreFileVersionResponse): RestoreFileVersionResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RestoreFileVersionResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RestoreFileVersionResponse;
+  static deserializeBinaryFromReader(message: RestoreFileVersionResponse, reader: jspb.BinaryReader): RestoreFileVersionResponse;
+}
+
+export namespace RestoreFileVersionResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class RestoreRecycleItemRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  getKey(): string;
+  setKey(value: string): void;
+
+  hasRestoreRef(): boolean;
+  clearRestoreRef(): void;
+  getRestoreRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRestoreRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RestoreRecycleItemRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: RestoreRecycleItemRequest): RestoreRecycleItemRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RestoreRecycleItemRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RestoreRecycleItemRequest;
+  static deserializeBinaryFromReader(message: RestoreRecycleItemRequest, reader: jspb.BinaryReader): RestoreRecycleItemRequest;
+}
+
+export namespace RestoreRecycleItemRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    key: string,
+    restoreRef?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class RestoreRecycleItemResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RestoreRecycleItemResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: RestoreRecycleItemResponse): RestoreRecycleItemResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RestoreRecycleItemResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RestoreRecycleItemResponse;
+  static deserializeBinaryFromReader(message: RestoreRecycleItemResponse, reader: jspb.BinaryReader): RestoreRecycleItemResponse;
+}
+
+export namespace RestoreRecycleItemResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class RemoveGrantRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasGrant(): boolean;
+  clearGrant(): void;
+  getGrant(): cs3_storage_provider_v1beta1_resources_pb.Grant | undefined;
+  setGrant(value?: cs3_storage_provider_v1beta1_resources_pb.Grant): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemoveGrantRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: RemoveGrantRequest): RemoveGrantRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemoveGrantRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemoveGrantRequest;
+  static deserializeBinaryFromReader(message: RemoveGrantRequest, reader: jspb.BinaryReader): RemoveGrantRequest;
+}
+
+export namespace RemoveGrantRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    grant?: cs3_storage_provider_v1beta1_resources_pb.Grant.AsObject,
+  }
+}
+
+export class RemoveGrantResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RemoveGrantResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: RemoveGrantResponse): RemoveGrantResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RemoveGrantResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RemoveGrantResponse;
+  static deserializeBinaryFromReader(message: RemoveGrantResponse, reader: jspb.BinaryReader): RemoveGrantResponse;
+}
+
+export namespace RemoveGrantResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class StatRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  clearArbitraryMetadataKeysList(): void;
+  getArbitraryMetadataKeysList(): Array<string>;
+  setArbitraryMetadataKeysList(value: Array<string>): void;
+  addArbitraryMetadataKeys(value: string, index?: number): string;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): StatRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: StatRequest): StatRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: StatRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): StatRequest;
+  static deserializeBinaryFromReader(message: StatRequest, reader: jspb.BinaryReader): StatRequest;
+}
+
+export namespace StatRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    arbitraryMetadataKeysList: Array<string>,
+  }
+}
+
+export class StatResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasInfo(): boolean;
+  clearInfo(): void;
+  getInfo(): cs3_storage_provider_v1beta1_resources_pb.ResourceInfo | undefined;
+  setInfo(value?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): StatResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: StatResponse): StatResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: StatResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): StatResponse;
+  static deserializeBinaryFromReader(message: StatResponse, reader: jspb.BinaryReader): StatResponse;
+}
+
+export namespace StatResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    info?: cs3_storage_provider_v1beta1_resources_pb.ResourceInfo.AsObject,
+  }
+}
+
+export class UpdateGrantRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasGrant(): boolean;
+  clearGrant(): void;
+  getGrant(): cs3_storage_provider_v1beta1_resources_pb.Grant | undefined;
+  setGrant(value?: cs3_storage_provider_v1beta1_resources_pb.Grant): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateGrantRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateGrantRequest): UpdateGrantRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateGrantRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateGrantRequest;
+  static deserializeBinaryFromReader(message: UpdateGrantRequest, reader: jspb.BinaryReader): UpdateGrantRequest;
+}
+
+export namespace UpdateGrantRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    grant?: cs3_storage_provider_v1beta1_resources_pb.Grant.AsObject,
+  }
+}
+
+export class UpdateGrantResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateGrantResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateGrantResponse): UpdateGrantResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateGrantResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateGrantResponse;
+  static deserializeBinaryFromReader(message: UpdateGrantResponse, reader: jspb.BinaryReader): UpdateGrantResponse;
+}
+
+export namespace UpdateGrantResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class CreateSymlinkRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  getTarget(): string;
+  setTarget(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateSymlinkRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateSymlinkRequest): CreateSymlinkRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateSymlinkRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateSymlinkRequest;
+  static deserializeBinaryFromReader(message: CreateSymlinkRequest, reader: jspb.BinaryReader): CreateSymlinkRequest;
+}
+
+export namespace CreateSymlinkRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    target: string,
+  }
+}
+
+export class CreateSymlinkResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateSymlinkResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateSymlinkResponse): CreateSymlinkResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateSymlinkResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateSymlinkResponse;
+  static deserializeBinaryFromReader(message: CreateSymlinkResponse, reader: jspb.BinaryReader): CreateSymlinkResponse;
+}
+
+export namespace CreateSymlinkResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class CreateReferenceRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  getTargetUri(): string;
+  setTargetUri(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateReferenceRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateReferenceRequest): CreateReferenceRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateReferenceRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateReferenceRequest;
+  static deserializeBinaryFromReader(message: CreateReferenceRequest, reader: jspb.BinaryReader): CreateReferenceRequest;
+}
+
+export namespace CreateReferenceRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    targetUri: string,
+  }
+}
+
+export class CreateReferenceResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateReferenceResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateReferenceResponse): CreateReferenceResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateReferenceResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateReferenceResponse;
+  static deserializeBinaryFromReader(message: CreateReferenceResponse, reader: jspb.BinaryReader): CreateReferenceResponse;
+}
+
+export namespace CreateReferenceResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class SetArbitraryMetadataRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasArbitraryMetadata(): boolean;
+  clearArbitraryMetadata(): void;
+  getArbitraryMetadata(): cs3_storage_provider_v1beta1_resources_pb.ArbitraryMetadata | undefined;
+  setArbitraryMetadata(value?: cs3_storage_provider_v1beta1_resources_pb.ArbitraryMetadata): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): SetArbitraryMetadataRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: SetArbitraryMetadataRequest): SetArbitraryMetadataRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: SetArbitraryMetadataRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): SetArbitraryMetadataRequest;
+  static deserializeBinaryFromReader(message: SetArbitraryMetadataRequest, reader: jspb.BinaryReader): SetArbitraryMetadataRequest;
+}
+
+export namespace SetArbitraryMetadataRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    arbitraryMetadata?: cs3_storage_provider_v1beta1_resources_pb.ArbitraryMetadata.AsObject,
+  }
+}
+
+export class SetArbitraryMetadataResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): SetArbitraryMetadataResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: SetArbitraryMetadataResponse): SetArbitraryMetadataResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: SetArbitraryMetadataResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): SetArbitraryMetadataResponse;
+  static deserializeBinaryFromReader(message: SetArbitraryMetadataResponse, reader: jspb.BinaryReader): SetArbitraryMetadataResponse;
+}
+
+export namespace SetArbitraryMetadataResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class UnsetArbitraryMetadataRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  clearArbitraryMetadataKeysList(): void;
+  getArbitraryMetadataKeysList(): Array<string>;
+  setArbitraryMetadataKeysList(value: Array<string>): void;
+  addArbitraryMetadataKeys(value: string, index?: number): string;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UnsetArbitraryMetadataRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: UnsetArbitraryMetadataRequest): UnsetArbitraryMetadataRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UnsetArbitraryMetadataRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UnsetArbitraryMetadataRequest;
+  static deserializeBinaryFromReader(message: UnsetArbitraryMetadataRequest, reader: jspb.BinaryReader): UnsetArbitraryMetadataRequest;
+}
+
+export namespace UnsetArbitraryMetadataRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    arbitraryMetadataKeysList: Array<string>,
+  }
+}
+
+export class UnsetArbitraryMetadataResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UnsetArbitraryMetadataResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: UnsetArbitraryMetadataResponse): UnsetArbitraryMetadataResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UnsetArbitraryMetadataResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UnsetArbitraryMetadataResponse;
+  static deserializeBinaryFromReader(message: UnsetArbitraryMetadataResponse, reader: jspb.BinaryReader): UnsetArbitraryMetadataResponse;
+}
+
+export namespace UnsetArbitraryMetadataResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class CreateHomeRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateHomeRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateHomeRequest): CreateHomeRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateHomeRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateHomeRequest;
+  static deserializeBinaryFromReader(message: CreateHomeRequest, reader: jspb.BinaryReader): CreateHomeRequest;
+}
+
+export namespace CreateHomeRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class CreateHomeResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateHomeResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateHomeResponse): CreateHomeResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateHomeResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateHomeResponse;
+  static deserializeBinaryFromReader(message: CreateHomeResponse, reader: jspb.BinaryReader): CreateHomeResponse;
+}
+
+export namespace CreateHomeResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class CreateStorageSpaceRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  getType(): string;
+  setType(value: string): void;
+
+  getName(): string;
+  setName(value: string): void;
+
+  hasQuota(): boolean;
+  clearQuota(): void;
+  getQuota(): cs3_storage_provider_v1beta1_resources_pb.Quota | undefined;
+  setQuota(value?: cs3_storage_provider_v1beta1_resources_pb.Quota): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateStorageSpaceRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateStorageSpaceRequest): CreateStorageSpaceRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateStorageSpaceRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateStorageSpaceRequest;
+  static deserializeBinaryFromReader(message: CreateStorageSpaceRequest, reader: jspb.BinaryReader): CreateStorageSpaceRequest;
+}
+
+export namespace CreateStorageSpaceRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    owner?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+    type: string,
+    name: string,
+    quota?: cs3_storage_provider_v1beta1_resources_pb.Quota.AsObject,
+  }
+}
+
+export class CreateStorageSpaceResponse extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasStorageSpace(): boolean;
+  clearStorageSpace(): void;
+  getStorageSpace(): cs3_storage_provider_v1beta1_resources_pb.StorageSpace | undefined;
+  setStorageSpace(value?: cs3_storage_provider_v1beta1_resources_pb.StorageSpace): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateStorageSpaceResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateStorageSpaceResponse): CreateStorageSpaceResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateStorageSpaceResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateStorageSpaceResponse;
+  static deserializeBinaryFromReader(message: CreateStorageSpaceResponse, reader: jspb.BinaryReader): CreateStorageSpaceResponse;
+}
+
+export namespace CreateStorageSpaceResponse {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    storageSpace?: cs3_storage_provider_v1beta1_resources_pb.StorageSpace.AsObject,
+  }
+}
+
+export class ListStorageSpacesRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearFiltersList(): void;
+  getFiltersList(): Array<ListStorageSpacesRequest.Filter>;
+  setFiltersList(value: Array<ListStorageSpacesRequest.Filter>): void;
+  addFilters(value?: ListStorageSpacesRequest.Filter, index?: number): ListStorageSpacesRequest.Filter;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListStorageSpacesRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListStorageSpacesRequest): ListStorageSpacesRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListStorageSpacesRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListStorageSpacesRequest;
+  static deserializeBinaryFromReader(message: ListStorageSpacesRequest, reader: jspb.BinaryReader): ListStorageSpacesRequest;
+}
+
+export namespace ListStorageSpacesRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    filtersList: Array<ListStorageSpacesRequest.Filter.AsObject>,
+  }
+
+  export class Filter extends jspb.Message {
+    getType(): ListStorageSpacesRequest.Filter.Type;
+    setType(value: ListStorageSpacesRequest.Filter.Type): void;
+
+    hasId(): boolean;
+    clearId(): void;
+    getId(): cs3_storage_provider_v1beta1_resources_pb.StorageSpaceId | undefined;
+    setId(value?: cs3_storage_provider_v1beta1_resources_pb.StorageSpaceId): void;
+
+    hasOwner(): boolean;
+    clearOwner(): void;
+    getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+    setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+    hasSpaceType(): boolean;
+    clearSpaceType(): void;
+    getSpaceType(): string;
+    setSpaceType(value: string): void;
+
+    getTermCase(): Filter.TermCase;
+    serializeBinary(): Uint8Array;
+    toObject(includeInstance?: boolean): Filter.AsObject;
+    static toObject(includeInstance: boolean, msg: Filter): Filter.AsObject;
+    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+    static serializeBinaryToWriter(message: Filter, writer: jspb.BinaryWriter): void;
+    static deserializeBinary(bytes: Uint8Array): Filter;
+    static deserializeBinaryFromReader(message: Filter, reader: jspb.BinaryReader): Filter;
+  }
+
+  export namespace Filter {
+    export type AsObject = {
+      type: ListStorageSpacesRequest.Filter.Type,
+      id?: cs3_storage_provider_v1beta1_resources_pb.StorageSpaceId.AsObject,
+      owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+      spaceType: string,
+    }
+
+    export enum Type {
+      TYPE_INVALID = 0,
+      TYPE_NO = 1,
+      TYPE_ID = 2,
+      TYPE_OWNER = 3,
+      TYPE_SPACE_TYPE = 4,
+    }
+
+    export enum TermCase {
+      TERM_NOT_SET = 0,
+      ID = 2,
+      OWNER = 3,
+      SPACE_TYPE = 4,
+    }
+  }
+}
+
+export class ListStorageSpacesResponse extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  clearStorageSpacesList(): void;
+  getStorageSpacesList(): Array<cs3_storage_provider_v1beta1_resources_pb.StorageSpace>;
+  setStorageSpacesList(value: Array<cs3_storage_provider_v1beta1_resources_pb.StorageSpace>): void;
+  addStorageSpaces(value?: cs3_storage_provider_v1beta1_resources_pb.StorageSpace, index?: number): cs3_storage_provider_v1beta1_resources_pb.StorageSpace;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListStorageSpacesResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListStorageSpacesResponse): ListStorageSpacesResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListStorageSpacesResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListStorageSpacesResponse;
+  static deserializeBinaryFromReader(message: ListStorageSpacesResponse, reader: jspb.BinaryReader): ListStorageSpacesResponse;
+}
+
+export namespace ListStorageSpacesResponse {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    storageSpacesList: Array<cs3_storage_provider_v1beta1_resources_pb.StorageSpace.AsObject>,
+  }
+}
+
+export class UpdateStorageSpaceRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasStorageSpace(): boolean;
+  clearStorageSpace(): void;
+  getStorageSpace(): cs3_storage_provider_v1beta1_resources_pb.StorageSpace | undefined;
+  setStorageSpace(value?: cs3_storage_provider_v1beta1_resources_pb.StorageSpace): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateStorageSpaceRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateStorageSpaceRequest): UpdateStorageSpaceRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateStorageSpaceRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateStorageSpaceRequest;
+  static deserializeBinaryFromReader(message: UpdateStorageSpaceRequest, reader: jspb.BinaryReader): UpdateStorageSpaceRequest;
+}
+
+export namespace UpdateStorageSpaceRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    storageSpace?: cs3_storage_provider_v1beta1_resources_pb.StorageSpace.AsObject,
+  }
+}
+
+export class UpdateStorageSpaceResponse extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasStorageSpace(): boolean;
+  clearStorageSpace(): void;
+  getStorageSpace(): cs3_storage_provider_v1beta1_resources_pb.StorageSpace | undefined;
+  setStorageSpace(value?: cs3_storage_provider_v1beta1_resources_pb.StorageSpace): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): UpdateStorageSpaceResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: UpdateStorageSpaceResponse): UpdateStorageSpaceResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: UpdateStorageSpaceResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): UpdateStorageSpaceResponse;
+  static deserializeBinaryFromReader(message: UpdateStorageSpaceResponse, reader: jspb.BinaryReader): UpdateStorageSpaceResponse;
+}
+
+export namespace UpdateStorageSpaceResponse {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    storageSpace?: cs3_storage_provider_v1beta1_resources_pb.StorageSpace.AsObject,
+  }
+}
+
+export class DeleteStorageSpaceRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasId(): boolean;
+  clearId(): void;
+  getId(): cs3_storage_provider_v1beta1_resources_pb.StorageSpaceId | undefined;
+  setId(value?: cs3_storage_provider_v1beta1_resources_pb.StorageSpaceId): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DeleteStorageSpaceRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: DeleteStorageSpaceRequest): DeleteStorageSpaceRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DeleteStorageSpaceRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DeleteStorageSpaceRequest;
+  static deserializeBinaryFromReader(message: DeleteStorageSpaceRequest, reader: jspb.BinaryReader): DeleteStorageSpaceRequest;
+}
+
+export namespace DeleteStorageSpaceRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    id?: cs3_storage_provider_v1beta1_resources_pb.StorageSpaceId.AsObject,
+  }
+}
+
+export class DeleteStorageSpaceResponse extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): DeleteStorageSpaceResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: DeleteStorageSpaceResponse): DeleteStorageSpaceResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: DeleteStorageSpaceResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): DeleteStorageSpaceResponse;
+  static deserializeBinaryFromReader(message: DeleteStorageSpaceResponse, reader: jspb.BinaryReader): DeleteStorageSpaceResponse;
+}
+
+export namespace DeleteStorageSpaceResponse {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+  }
+}
+
diff --git a/cs3/storage/provider/v1beta1/resources_pb.d.ts b/cs3/storage/provider/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..b8f5b7f
--- /dev/null
+++ b/cs3/storage/provider/v1beta1/resources_pb.d.ts
@@ -0,0 +1,691 @@
+// package: cs3.storage.provider.v1beta1
+// file: cs3/storage/provider/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_group_v1beta1_resources_pb from '../../../../cs3/identity/group/v1beta1/resources_pb';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class ResourceInfo extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getType(): ResourceType;
+  setType(value: ResourceType): void;
+
+  hasId(): boolean;
+  clearId(): void;
+  getId(): ResourceId | undefined;
+  setId(value?: ResourceId): void;
+
+  hasChecksum(): boolean;
+  clearChecksum(): void;
+  getChecksum(): ResourceChecksum | undefined;
+  setChecksum(value?: ResourceChecksum): void;
+
+  getEtag(): string;
+  setEtag(value: string): void;
+
+  getMimeType(): string;
+  setMimeType(value: string): void;
+
+  hasMtime(): boolean;
+  clearMtime(): void;
+  getMtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setMtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  getPath(): string;
+  setPath(value: string): void;
+
+  hasPermissionSet(): boolean;
+  clearPermissionSet(): void;
+  getPermissionSet(): ResourcePermissions | undefined;
+  setPermissionSet(value?: ResourcePermissions): void;
+
+  getSize(): number;
+  setSize(value: number): void;
+
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  getTarget(): string;
+  setTarget(value: string): void;
+
+  hasCanonicalMetadata(): boolean;
+  clearCanonicalMetadata(): void;
+  getCanonicalMetadata(): CanonicalMetadata | undefined;
+  setCanonicalMetadata(value?: CanonicalMetadata): void;
+
+  hasArbitraryMetadata(): boolean;
+  clearArbitraryMetadata(): void;
+  getArbitraryMetadata(): ArbitraryMetadata | undefined;
+  setArbitraryMetadata(value?: ArbitraryMetadata): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ResourceInfo.AsObject;
+  static toObject(includeInstance: boolean, msg: ResourceInfo): ResourceInfo.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ResourceInfo, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ResourceInfo;
+  static deserializeBinaryFromReader(message: ResourceInfo, reader: jspb.BinaryReader): ResourceInfo;
+}
+
+export namespace ResourceInfo {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    type: ResourceType,
+    id?: ResourceId.AsObject,
+    checksum?: ResourceChecksum.AsObject,
+    etag: string,
+    mimeType: string,
+    mtime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    path: string,
+    permissionSet?: ResourcePermissions.AsObject,
+    size: number,
+    owner?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    target: string,
+    canonicalMetadata?: CanonicalMetadata.AsObject,
+    arbitraryMetadata?: ArbitraryMetadata.AsObject,
+  }
+}
+
+export class CanonicalMetadata extends jspb.Message {
+  hasTarget(): boolean;
+  clearTarget(): void;
+  getTarget(): Reference | undefined;
+  setTarget(value?: Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CanonicalMetadata.AsObject;
+  static toObject(includeInstance: boolean, msg: CanonicalMetadata): CanonicalMetadata.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CanonicalMetadata, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CanonicalMetadata;
+  static deserializeBinaryFromReader(message: CanonicalMetadata, reader: jspb.BinaryReader): CanonicalMetadata;
+}
+
+export namespace CanonicalMetadata {
+  export type AsObject = {
+    target?: Reference.AsObject,
+  }
+}
+
+export class ArbitraryMetadata extends jspb.Message {
+  getMetadataMap(): jspb.Map<string, string>;
+  clearMetadataMap(): void;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ArbitraryMetadata.AsObject;
+  static toObject(includeInstance: boolean, msg: ArbitraryMetadata): ArbitraryMetadata.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ArbitraryMetadata, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ArbitraryMetadata;
+  static deserializeBinaryFromReader(message: ArbitraryMetadata, reader: jspb.BinaryReader): ArbitraryMetadata;
+}
+
+export namespace ArbitraryMetadata {
+  export type AsObject = {
+    metadataMap: Array<[string, string]>,
+  }
+}
+
+export class ResourceChecksum extends jspb.Message {
+  getType(): ResourceChecksumType;
+  setType(value: ResourceChecksumType): void;
+
+  getSum(): string;
+  setSum(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ResourceChecksum.AsObject;
+  static toObject(includeInstance: boolean, msg: ResourceChecksum): ResourceChecksum.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ResourceChecksum, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ResourceChecksum;
+  static deserializeBinaryFromReader(message: ResourceChecksum, reader: jspb.BinaryReader): ResourceChecksum;
+}
+
+export namespace ResourceChecksum {
+  export type AsObject = {
+    type: ResourceChecksumType,
+    sum: string,
+  }
+}
+
+export class ResourceChecksumPriority extends jspb.Message {
+  getType(): ResourceChecksumType;
+  setType(value: ResourceChecksumType): void;
+
+  getPriority(): number;
+  setPriority(value: number): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ResourceChecksumPriority.AsObject;
+  static toObject(includeInstance: boolean, msg: ResourceChecksumPriority): ResourceChecksumPriority.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ResourceChecksumPriority, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ResourceChecksumPriority;
+  static deserializeBinaryFromReader(message: ResourceChecksumPriority, reader: jspb.BinaryReader): ResourceChecksumPriority;
+}
+
+export namespace ResourceChecksumPriority {
+  export type AsObject = {
+    type: ResourceChecksumType,
+    priority: number,
+  }
+}
+
+export class Reference extends jspb.Message {
+  hasResourceId(): boolean;
+  clearResourceId(): void;
+  getResourceId(): ResourceId | undefined;
+  setResourceId(value?: ResourceId): void;
+
+  getPath(): string;
+  setPath(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Reference.AsObject;
+  static toObject(includeInstance: boolean, msg: Reference): Reference.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Reference, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Reference;
+  static deserializeBinaryFromReader(message: Reference, reader: jspb.BinaryReader): Reference;
+}
+
+export namespace Reference {
+  export type AsObject = {
+    resourceId?: ResourceId.AsObject,
+    path: string,
+  }
+}
+
+export class ResourceId extends jspb.Message {
+  getStorageId(): string;
+  setStorageId(value: string): void;
+
+  getOpaqueId(): string;
+  setOpaqueId(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ResourceId.AsObject;
+  static toObject(includeInstance: boolean, msg: ResourceId): ResourceId.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ResourceId, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ResourceId;
+  static deserializeBinaryFromReader(message: ResourceId, reader: jspb.BinaryReader): ResourceId;
+}
+
+export namespace ResourceId {
+  export type AsObject = {
+    storageId: string,
+    opaqueId: string,
+  }
+}
+
+export class ResourcePermissions extends jspb.Message {
+  getAddGrant(): boolean;
+  setAddGrant(value: boolean): void;
+
+  getCreateContainer(): boolean;
+  setCreateContainer(value: boolean): void;
+
+  getDelete(): boolean;
+  setDelete(value: boolean): void;
+
+  getGetPath(): boolean;
+  setGetPath(value: boolean): void;
+
+  getGetQuota(): boolean;
+  setGetQuota(value: boolean): void;
+
+  getInitiateFileDownload(): boolean;
+  setInitiateFileDownload(value: boolean): void;
+
+  getInitiateFileUpload(): boolean;
+  setInitiateFileUpload(value: boolean): void;
+
+  getListGrants(): boolean;
+  setListGrants(value: boolean): void;
+
+  getListContainer(): boolean;
+  setListContainer(value: boolean): void;
+
+  getListFileVersions(): boolean;
+  setListFileVersions(value: boolean): void;
+
+  getListRecycle(): boolean;
+  setListRecycle(value: boolean): void;
+
+  getMove(): boolean;
+  setMove(value: boolean): void;
+
+  getRemoveGrant(): boolean;
+  setRemoveGrant(value: boolean): void;
+
+  getPurgeRecycle(): boolean;
+  setPurgeRecycle(value: boolean): void;
+
+  getRestoreFileVersion(): boolean;
+  setRestoreFileVersion(value: boolean): void;
+
+  getRestoreRecycleItem(): boolean;
+  setRestoreRecycleItem(value: boolean): void;
+
+  getStat(): boolean;
+  setStat(value: boolean): void;
+
+  getUpdateGrant(): boolean;
+  setUpdateGrant(value: boolean): void;
+
+  getDenyGrant(): boolean;
+  setDenyGrant(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ResourcePermissions.AsObject;
+  static toObject(includeInstance: boolean, msg: ResourcePermissions): ResourcePermissions.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ResourcePermissions, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ResourcePermissions;
+  static deserializeBinaryFromReader(message: ResourcePermissions, reader: jspb.BinaryReader): ResourcePermissions;
+}
+
+export namespace ResourcePermissions {
+  export type AsObject = {
+    addGrant: boolean,
+    createContainer: boolean,
+    pb_delete: boolean,
+    getPath: boolean,
+    getQuota: boolean,
+    initiateFileDownload: boolean,
+    initiateFileUpload: boolean,
+    listGrants: boolean,
+    listContainer: boolean,
+    listFileVersions: boolean,
+    listRecycle: boolean,
+    move: boolean,
+    removeGrant: boolean,
+    purgeRecycle: boolean,
+    restoreFileVersion: boolean,
+    restoreRecycleItem: boolean,
+    stat: boolean,
+    updateGrant: boolean,
+    denyGrant: boolean,
+  }
+}
+
+export class Grant extends jspb.Message {
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): Grantee | undefined;
+  setGrantee(value?: Grantee): void;
+
+  hasPermissions(): boolean;
+  clearPermissions(): void;
+  getPermissions(): ResourcePermissions | undefined;
+  setPermissions(value?: ResourcePermissions): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Grant.AsObject;
+  static toObject(includeInstance: boolean, msg: Grant): Grant.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Grant, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Grant;
+  static deserializeBinaryFromReader(message: Grant, reader: jspb.BinaryReader): Grant;
+}
+
+export namespace Grant {
+  export type AsObject = {
+    grantee?: Grantee.AsObject,
+    permissions?: ResourcePermissions.AsObject,
+  }
+}
+
+export class Grantee extends jspb.Message {
+  getType(): GranteeType;
+  setType(value: GranteeType): void;
+
+  hasUserId(): boolean;
+  clearUserId(): void;
+  getUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasGroupId(): boolean;
+  clearGroupId(): void;
+  getGroupId(): cs3_identity_group_v1beta1_resources_pb.GroupId | undefined;
+  setGroupId(value?: cs3_identity_group_v1beta1_resources_pb.GroupId): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getIdCase(): Grantee.IdCase;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Grantee.AsObject;
+  static toObject(includeInstance: boolean, msg: Grantee): Grantee.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Grantee, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Grantee;
+  static deserializeBinaryFromReader(message: Grantee, reader: jspb.BinaryReader): Grantee;
+}
+
+export namespace Grantee {
+  export type AsObject = {
+    type: GranteeType,
+    userId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    groupId?: cs3_identity_group_v1beta1_resources_pb.GroupId.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+
+  export enum IdCase {
+    ID_NOT_SET = 0,
+    USER_ID = 3,
+    GROUP_ID = 4,
+  }
+}
+
+export class FileVersion extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getKey(): string;
+  setKey(value: string): void;
+
+  getSize(): number;
+  setSize(value: number): void;
+
+  getMtime(): number;
+  setMtime(value: number): void;
+
+  getEtag(): string;
+  setEtag(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FileVersion.AsObject;
+  static toObject(includeInstance: boolean, msg: FileVersion): FileVersion.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FileVersion, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FileVersion;
+  static deserializeBinaryFromReader(message: FileVersion, reader: jspb.BinaryReader): FileVersion;
+}
+
+export namespace FileVersion {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    key: string,
+    size: number,
+    mtime: number,
+    etag: string,
+  }
+}
+
+export class RecycleItem extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getType(): ResourceType;
+  setType(value: ResourceType): void;
+
+  getKey(): string;
+  setKey(value: string): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): Reference | undefined;
+  setRef(value?: Reference): void;
+
+  getSize(): number;
+  setSize(value: number): void;
+
+  hasDeletionTime(): boolean;
+  clearDeletionTime(): void;
+  getDeletionTime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setDeletionTime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): RecycleItem.AsObject;
+  static toObject(includeInstance: boolean, msg: RecycleItem): RecycleItem.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: RecycleItem, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): RecycleItem;
+  static deserializeBinaryFromReader(message: RecycleItem, reader: jspb.BinaryReader): RecycleItem;
+}
+
+export namespace RecycleItem {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    type: ResourceType,
+    key: string,
+    ref?: Reference.AsObject,
+    size: number,
+    deletionTime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
+export class FileUploadProtocol extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getProtocol(): string;
+  setProtocol(value: string): void;
+
+  getUploadEndpoint(): string;
+  setUploadEndpoint(value: string): void;
+
+  clearAvailableChecksumsList(): void;
+  getAvailableChecksumsList(): Array<ResourceChecksumPriority>;
+  setAvailableChecksumsList(value: Array<ResourceChecksumPriority>): void;
+  addAvailableChecksums(value?: ResourceChecksumPriority, index?: number): ResourceChecksumPriority;
+
+  getExpose(): boolean;
+  setExpose(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FileUploadProtocol.AsObject;
+  static toObject(includeInstance: boolean, msg: FileUploadProtocol): FileUploadProtocol.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FileUploadProtocol, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FileUploadProtocol;
+  static deserializeBinaryFromReader(message: FileUploadProtocol, reader: jspb.BinaryReader): FileUploadProtocol;
+}
+
+export namespace FileUploadProtocol {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    protocol: string,
+    uploadEndpoint: string,
+    availableChecksumsList: Array<ResourceChecksumPriority.AsObject>,
+    expose: boolean,
+  }
+}
+
+export class FileDownloadProtocol extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getProtocol(): string;
+  setProtocol(value: string): void;
+
+  getDownloadEndpoint(): string;
+  setDownloadEndpoint(value: string): void;
+
+  getExpose(): boolean;
+  setExpose(value: boolean): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): FileDownloadProtocol.AsObject;
+  static toObject(includeInstance: boolean, msg: FileDownloadProtocol): FileDownloadProtocol.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: FileDownloadProtocol, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): FileDownloadProtocol;
+  static deserializeBinaryFromReader(message: FileDownloadProtocol, reader: jspb.BinaryReader): FileDownloadProtocol;
+}
+
+export namespace FileDownloadProtocol {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    protocol: string,
+    downloadEndpoint: string,
+    expose: boolean,
+  }
+}
+
+export class StorageSpace extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasId(): boolean;
+  clearId(): void;
+  getId(): StorageSpaceId | undefined;
+  setId(value?: StorageSpaceId): void;
+
+  hasOwner(): boolean;
+  clearOwner(): void;
+  getOwner(): cs3_identity_user_v1beta1_resources_pb.User | undefined;
+  setOwner(value?: cs3_identity_user_v1beta1_resources_pb.User): void;
+
+  hasRoot(): boolean;
+  clearRoot(): void;
+  getRoot(): ResourceId | undefined;
+  setRoot(value?: ResourceId): void;
+
+  getName(): string;
+  setName(value: string): void;
+
+  hasQuota(): boolean;
+  clearQuota(): void;
+  getQuota(): Quota | undefined;
+  setQuota(value?: Quota): void;
+
+  getSpaceType(): string;
+  setSpaceType(value: string): void;
+
+  hasMtime(): boolean;
+  clearMtime(): void;
+  getMtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setMtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): StorageSpace.AsObject;
+  static toObject(includeInstance: boolean, msg: StorageSpace): StorageSpace.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: StorageSpace, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): StorageSpace;
+  static deserializeBinaryFromReader(message: StorageSpace, reader: jspb.BinaryReader): StorageSpace;
+}
+
+export namespace StorageSpace {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    id?: StorageSpaceId.AsObject,
+    owner?: cs3_identity_user_v1beta1_resources_pb.User.AsObject,
+    root?: ResourceId.AsObject,
+    name: string,
+    quota?: Quota.AsObject,
+    spaceType: string,
+    mtime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+  }
+}
+
+export class StorageSpaceId extends jspb.Message {
+  getOpaqueId(): string;
+  setOpaqueId(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): StorageSpaceId.AsObject;
+  static toObject(includeInstance: boolean, msg: StorageSpaceId): StorageSpaceId.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: StorageSpaceId, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): StorageSpaceId;
+  static deserializeBinaryFromReader(message: StorageSpaceId, reader: jspb.BinaryReader): StorageSpaceId;
+}
+
+export namespace StorageSpaceId {
+  export type AsObject = {
+    opaqueId: string,
+  }
+}
+
+export class Quota extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getQuotaMaxBytes(): number;
+  setQuotaMaxBytes(value: number): void;
+
+  getQuotaMaxFiles(): number;
+  setQuotaMaxFiles(value: number): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Quota.AsObject;
+  static toObject(includeInstance: boolean, msg: Quota): Quota.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Quota, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Quota;
+  static deserializeBinaryFromReader(message: Quota, reader: jspb.BinaryReader): Quota;
+}
+
+export namespace Quota {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    quotaMaxBytes: number,
+    quotaMaxFiles: number,
+  }
+}
+
+export enum ResourceType {
+  RESOURCE_TYPE_INVALID = 0,
+  RESOURCE_TYPE_FILE = 1,
+  RESOURCE_TYPE_CONTAINER = 2,
+  RESOURCE_TYPE_REFERENCE = 3,
+  RESOURCE_TYPE_SYMLINK = 4,
+  RESOURCE_TYPE_INTERNAL = 5,
+}
+
+export enum ResourceChecksumType {
+  RESOURCE_CHECKSUM_TYPE_INVALID = 0,
+  RESOURCE_CHECKSUM_TYPE_UNSET = 1,
+  RESOURCE_CHECKSUM_TYPE_ADLER32 = 2,
+  RESOURCE_CHECKSUM_TYPE_MD5 = 3,
+  RESOURCE_CHECKSUM_TYPE_SHA1 = 4,
+}
+
+export enum GranteeType {
+  GRANTEE_TYPE_INVALID = 0,
+  GRANTEE_TYPE_USER = 1,
+  GRANTEE_TYPE_GROUP = 2,
+}
+
diff --git a/cs3/storage/registry/v1beta1/registry_api_grpc_pb.d.ts b/cs3/storage/registry/v1beta1/registry_api_grpc_pb.d.ts
new file mode 100644
index 0000000..de5c132
--- /dev/null
+++ b/cs3/storage/registry/v1beta1/registry_api_grpc_pb.d.ts
@@ -0,0 +1,78 @@
+// package: cs3.storage.registry.v1beta1
+// file: cs3/storage/registry/v1beta1/registry_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_storage_registry_v1beta1_registry_api_pb from '../../../../cs3/storage/registry/v1beta1/registry_api_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_storage_registry_v1beta1_resources_pb from '../../../../cs3/storage/registry/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+interface IRegistryAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  getStorageProviders: IRegistryAPIService_IGetStorageProviders;
+  listStorageProviders: IRegistryAPIService_IListStorageProviders;
+  getHome: IRegistryAPIService_IGetHome;
+}
+
+interface IRegistryAPIService_IGetStorageProviders extends grpc.MethodDefinition<cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest, cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse> {
+  path: '/cs3.storage.registry.v1beta1.RegistryAPI/GetStorageProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse>;
+}
+
+interface IRegistryAPIService_IListStorageProviders extends grpc.MethodDefinition<cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest, cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse> {
+  path: '/cs3.storage.registry.v1beta1.RegistryAPI/ListStorageProviders'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse>;
+}
+
+interface IRegistryAPIService_IGetHome extends grpc.MethodDefinition<cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest, cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse> {
+  path: '/cs3.storage.registry.v1beta1.RegistryAPI/GetHome'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest>;
+  responseSerialize: grpc.serialize<cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse>;
+  responseDeserialize: grpc.deserialize<cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse>;
+}
+
+export const RegistryAPIService: IRegistryAPIService;
+export interface IRegistryAPIServer extends grpc.UntypedServiceImplementation {
+  getStorageProviders: grpc.handleUnaryCall<cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest, cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse>;
+  listStorageProviders: grpc.handleUnaryCall<cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest, cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse>;
+  getHome: grpc.handleUnaryCall<cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest, cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse>;
+}
+
+export interface IRegistryAPIClient {
+  getStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  getStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  getStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  listStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  listStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  listStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  getHome(request: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  getHome(request: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  getHome(request: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class RegistryAPIClient extends grpc.Client implements IRegistryAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public getStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  public getStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  public getStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  public listStorageProviders(request: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.ListStorageProvidersResponse) => void): grpc.ClientUnaryCall;
+  public getHome(request: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  public getHome(request: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+  public getHome(request: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_registry_v1beta1_registry_api_pb.GetHomeResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/storage/registry/v1beta1/registry_api_grpc_pb.js b/cs3/storage/registry/v1beta1/registry_api_grpc_pb.js
index 707ea3a..c980337 100644
--- a/cs3/storage/registry/v1beta1/registry_api_grpc_pb.js
+++ b/cs3/storage/registry/v1beta1/registry_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_storage_registry_v1beta1_registry_api_pb = require('../../../../cs3/storage/registry/v1beta1/registry_api_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../../cs3/rpc/v1beta1/status_pb.js');
 var cs3_storage_provider_v1beta1_resources_pb = require('../../../../cs3/storage/provider/v1beta1/resources_pb.js');
diff --git a/cs3/storage/registry/v1beta1/registry_api_pb.d.ts b/cs3/storage/registry/v1beta1/registry_api_pb.d.ts
new file mode 100644
index 0000000..fcfff8e
--- /dev/null
+++ b/cs3/storage/registry/v1beta1/registry_api_pb.d.ts
@@ -0,0 +1,183 @@
+// package: cs3.storage.registry.v1beta1
+// file: cs3/storage/registry/v1beta1/registry_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_rpc_v1beta1_status_pb from '../../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_storage_registry_v1beta1_resources_pb from '../../../../cs3/storage/registry/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class GetHomeRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetHomeRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetHomeRequest): GetHomeRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetHomeRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetHomeRequest;
+  static deserializeBinaryFromReader(message: GetHomeRequest, reader: jspb.BinaryReader): GetHomeRequest;
+}
+
+export namespace GetHomeRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetHomeResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasProvider(): boolean;
+  clearProvider(): void;
+  getProvider(): cs3_storage_registry_v1beta1_resources_pb.ProviderInfo | undefined;
+  setProvider(value?: cs3_storage_registry_v1beta1_resources_pb.ProviderInfo): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetHomeResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetHomeResponse): GetHomeResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetHomeResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetHomeResponse;
+  static deserializeBinaryFromReader(message: GetHomeResponse, reader: jspb.BinaryReader): GetHomeResponse;
+}
+
+export namespace GetHomeResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    provider?: cs3_storage_registry_v1beta1_resources_pb.ProviderInfo.AsObject,
+  }
+}
+
+export class GetStorageProvidersRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetStorageProvidersRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetStorageProvidersRequest): GetStorageProvidersRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetStorageProvidersRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetStorageProvidersRequest;
+  static deserializeBinaryFromReader(message: GetStorageProvidersRequest, reader: jspb.BinaryReader): GetStorageProvidersRequest;
+}
+
+export namespace GetStorageProvidersRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+  }
+}
+
+export class GetStorageProvidersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProvidersList(): void;
+  getProvidersList(): Array<cs3_storage_registry_v1beta1_resources_pb.ProviderInfo>;
+  setProvidersList(value: Array<cs3_storage_registry_v1beta1_resources_pb.ProviderInfo>): void;
+  addProviders(value?: cs3_storage_registry_v1beta1_resources_pb.ProviderInfo, index?: number): cs3_storage_registry_v1beta1_resources_pb.ProviderInfo;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetStorageProvidersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetStorageProvidersResponse): GetStorageProvidersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetStorageProvidersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetStorageProvidersResponse;
+  static deserializeBinaryFromReader(message: GetStorageProvidersResponse, reader: jspb.BinaryReader): GetStorageProvidersResponse;
+}
+
+export namespace GetStorageProvidersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    providersList: Array<cs3_storage_registry_v1beta1_resources_pb.ProviderInfo.AsObject>,
+  }
+}
+
+export class ListStorageProvidersRequest extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListStorageProvidersRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: ListStorageProvidersRequest): ListStorageProvidersRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListStorageProvidersRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListStorageProvidersRequest;
+  static deserializeBinaryFromReader(message: ListStorageProvidersRequest, reader: jspb.BinaryReader): ListStorageProvidersRequest;
+}
+
+export namespace ListStorageProvidersRequest {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class ListStorageProvidersResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  clearProvidersList(): void;
+  getProvidersList(): Array<cs3_storage_registry_v1beta1_resources_pb.ProviderInfo>;
+  setProvidersList(value: Array<cs3_storage_registry_v1beta1_resources_pb.ProviderInfo>): void;
+  addProviders(value?: cs3_storage_registry_v1beta1_resources_pb.ProviderInfo, index?: number): cs3_storage_registry_v1beta1_resources_pb.ProviderInfo;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ListStorageProvidersResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: ListStorageProvidersResponse): ListStorageProvidersResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ListStorageProvidersResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ListStorageProvidersResponse;
+  static deserializeBinaryFromReader(message: ListStorageProvidersResponse, reader: jspb.BinaryReader): ListStorageProvidersResponse;
+}
+
+export namespace ListStorageProvidersResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    providersList: Array<cs3_storage_registry_v1beta1_resources_pb.ProviderInfo.AsObject>,
+  }
+}
+
diff --git a/cs3/storage/registry/v1beta1/resources_pb.d.ts b/cs3/storage/registry/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..b338997
--- /dev/null
+++ b/cs3/storage/registry/v1beta1/resources_pb.d.ts
@@ -0,0 +1,74 @@
+// package: cs3.storage.registry.v1beta1
+// file: cs3/storage/registry/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_types_v1beta1_types_pb from '../../../../cs3/types/v1beta1/types_pb';
+
+export class ProviderInfo extends jspb.Message {
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  getProviderId(): string;
+  setProviderId(value: string): void;
+
+  getProviderPath(): string;
+  setProviderPath(value: string): void;
+
+  getAddress(): string;
+  setAddress(value: string): void;
+
+  getDescription(): string;
+  setDescription(value: string): void;
+
+  hasFeatures(): boolean;
+  clearFeatures(): void;
+  getFeatures(): ProviderInfo.Features | undefined;
+  setFeatures(value?: ProviderInfo.Features): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): ProviderInfo.AsObject;
+  static toObject(includeInstance: boolean, msg: ProviderInfo): ProviderInfo.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: ProviderInfo, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): ProviderInfo;
+  static deserializeBinaryFromReader(message: ProviderInfo, reader: jspb.BinaryReader): ProviderInfo;
+}
+
+export namespace ProviderInfo {
+  export type AsObject = {
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+    providerId: string,
+    providerPath: string,
+    address: string,
+    description: string,
+    features?: ProviderInfo.Features.AsObject,
+  }
+
+  export class Features extends jspb.Message {
+    getRecycle(): boolean;
+    setRecycle(value: boolean): void;
+
+    getFileVersions(): boolean;
+    setFileVersions(value: boolean): void;
+
+    serializeBinary(): Uint8Array;
+    toObject(includeInstance?: boolean): Features.AsObject;
+    static toObject(includeInstance: boolean, msg: Features): Features.AsObject;
+    static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+    static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+    static serializeBinaryToWriter(message: Features, writer: jspb.BinaryWriter): void;
+    static deserializeBinary(bytes: Uint8Array): Features;
+    static deserializeBinaryFromReader(message: Features, reader: jspb.BinaryReader): Features;
+  }
+
+  export namespace Features {
+    export type AsObject = {
+      recycle: boolean,
+      fileVersions: boolean,
+    }
+  }
+}
+
diff --git a/cs3/tx/v1beta1/resources_pb.d.ts b/cs3/tx/v1beta1/resources_pb.d.ts
new file mode 100644
index 0000000..2712e9f
--- /dev/null
+++ b/cs3/tx/v1beta1/resources_pb.d.ts
@@ -0,0 +1,96 @@
+// package: cs3.tx.v1beta1
+// file: cs3/tx/v1beta1/resources.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_identity_user_v1beta1_resources_pb from '../../../cs3/identity/user/v1beta1/resources_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../cs3/types/v1beta1/types_pb';
+
+export class TxId extends jspb.Message {
+  getOpaqueId(): string;
+  setOpaqueId(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): TxId.AsObject;
+  static toObject(includeInstance: boolean, msg: TxId): TxId.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: TxId, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): TxId;
+  static deserializeBinaryFromReader(message: TxId, reader: jspb.BinaryReader): TxId;
+}
+
+export namespace TxId {
+  export type AsObject = {
+    opaqueId: string,
+  }
+}
+
+export class TxInfo extends jspb.Message {
+  hasId(): boolean;
+  clearId(): void;
+  getId(): TxId | undefined;
+  setId(value?: TxId): void;
+
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  getStatus(): TxInfo.Status;
+  setStatus(value: TxInfo.Status): void;
+
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): cs3_storage_provider_v1beta1_resources_pb.Grantee | undefined;
+  setGrantee(value?: cs3_storage_provider_v1beta1_resources_pb.Grantee): void;
+
+  hasCreator(): boolean;
+  clearCreator(): void;
+  getCreator(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
+  setCreator(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
+
+  hasCtime(): boolean;
+  clearCtime(): void;
+  getCtime(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
+  setCtime(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
+
+  getDescription(): string;
+  setDescription(value: string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): TxInfo.AsObject;
+  static toObject(includeInstance: boolean, msg: TxInfo): TxInfo.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: TxInfo, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): TxInfo;
+  static deserializeBinaryFromReader(message: TxInfo, reader: jspb.BinaryReader): TxInfo;
+}
+
+export namespace TxInfo {
+  export type AsObject = {
+    id?: TxId.AsObject,
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    status: TxInfo.Status,
+    grantee?: cs3_storage_provider_v1beta1_resources_pb.Grantee.AsObject,
+    creator?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    ctime?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
+    description: string,
+  }
+
+  export enum Status {
+    STATUS_INVALID = 0,
+    STATUS_DESTINATION_NOT_FOUND = 1,
+    STATUS_TRANSFER_NEW = 2,
+    STATUS_TRANSFER_AWAITING_ACCEPTANCE = 3,
+    STATUS_TRANSFER_ACCEPTED = 4,
+    STATUS_TRANSFER_IN_PROGRESS = 5,
+    STATUS_TRANSFER_COMPLETE = 6,
+    STATUS_TRANSFER_FAILED = 7,
+    STATUS_TRANSFER_CANCELLED = 8,
+    STATUS_TRANSFER_CANCEL_FAILED = 9,
+    STATUS_TRANSFER_EXPIRED = 10,
+  }
+}
+
diff --git a/cs3/tx/v1beta1/tx_api_grpc_pb.d.ts b/cs3/tx/v1beta1/tx_api_grpc_pb.d.ts
new file mode 100644
index 0000000..685b8a6
--- /dev/null
+++ b/cs3/tx/v1beta1/tx_api_grpc_pb.d.ts
@@ -0,0 +1,78 @@
+// package: cs3.tx.v1beta1
+// file: cs3/tx/v1beta1/tx_api.proto
+
+import * as grpc from '@grpc/grpc-js';
+import * as cs3_tx_v1beta1_tx_api_pb from '../../../cs3/tx/v1beta1/tx_api_pb';
+import * as cs3_rpc_v1beta1_status_pb from '../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_tx_v1beta1_resources_pb from '../../../cs3/tx/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../cs3/types/v1beta1/types_pb';
+
+interface ITxAPIService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  createTransfer: ITxAPIService_ICreateTransfer;
+  getTransferStatus: ITxAPIService_IGetTransferStatus;
+  cancelTransfer: ITxAPIService_ICancelTransfer;
+}
+
+interface ITxAPIService_ICreateTransfer extends grpc.MethodDefinition<cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse> {
+  path: '/cs3.tx.v1beta1.TxAPI/CreateTransfer'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest>;
+  requestDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest>;
+  responseSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse>;
+  responseDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse>;
+}
+
+interface ITxAPIService_IGetTransferStatus extends grpc.MethodDefinition<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse> {
+  path: '/cs3.tx.v1beta1.TxAPI/GetTransferStatus'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest>;
+  requestDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest>;
+  responseSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse>;
+  responseDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse>;
+}
+
+interface ITxAPIService_ICancelTransfer extends grpc.MethodDefinition<cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse> {
+  path: '/cs3.tx.v1beta1.TxAPI/CancelTransfer'
+  requestStream: false
+  responseStream: false
+  requestSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest>;
+  requestDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest>;
+  responseSerialize: grpc.serialize<cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse>;
+  responseDeserialize: grpc.deserialize<cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse>;
+}
+
+export const TxAPIService: ITxAPIService;
+export interface ITxAPIServer extends grpc.UntypedServiceImplementation {
+  createTransfer: grpc.handleUnaryCall<cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse>;
+  getTransferStatus: grpc.handleUnaryCall<cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse>;
+  cancelTransfer: grpc.handleUnaryCall<cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse>;
+}
+
+export interface ITxAPIClient {
+  createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+  cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+  cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+}
+
+export class TxAPIClient extends grpc.Client implements ITxAPIClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial<grpc.ClientOptions>);
+  public createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  public createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  public createTransfer(request: cs3_tx_v1beta1_tx_api_pb.CreateTransferRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CreateTransferResponse) => void): grpc.ClientUnaryCall;
+  public getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  public getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  public getTransferStatus(request: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.GetTransferStatusResponse) => void): grpc.ClientUnaryCall;
+  public cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+  public cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+  public cancelTransfer(request: cs3_tx_v1beta1_tx_api_pb.CancelTransferRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_tx_v1beta1_tx_api_pb.CancelTransferResponse) => void): grpc.ClientUnaryCall;
+}
+
diff --git a/cs3/tx/v1beta1/tx_api_grpc_pb.js b/cs3/tx/v1beta1/tx_api_grpc_pb.js
index 6a1de56..c0c8688 100644
--- a/cs3/tx/v1beta1/tx_api_grpc_pb.js
+++ b/cs3/tx/v1beta1/tx_api_grpc_pb.js
@@ -20,7 +20,7 @@
 // or submit itself to any jurisdiction.
 //
 'use strict';
-var grpc = require('grpc');
+var grpc = require('@grpc/grpc-js');
 var cs3_tx_v1beta1_tx_api_pb = require('../../../cs3/tx/v1beta1/tx_api_pb.js');
 var cs3_rpc_v1beta1_status_pb = require('../../../cs3/rpc/v1beta1/status_pb.js');
 var cs3_storage_provider_v1beta1_resources_pb = require('../../../cs3/storage/provider/v1beta1/resources_pb.js');
diff --git a/cs3/tx/v1beta1/tx_api_pb.d.ts b/cs3/tx/v1beta1/tx_api_pb.d.ts
new file mode 100644
index 0000000..b2e41ef
--- /dev/null
+++ b/cs3/tx/v1beta1/tx_api_pb.d.ts
@@ -0,0 +1,201 @@
+// package: cs3.tx.v1beta1
+// file: cs3/tx/v1beta1/tx_api.proto
+
+import * as jspb from 'google-protobuf';
+import * as cs3_rpc_v1beta1_status_pb from '../../../cs3/rpc/v1beta1/status_pb';
+import * as cs3_storage_provider_v1beta1_resources_pb from '../../../cs3/storage/provider/v1beta1/resources_pb';
+import * as cs3_tx_v1beta1_resources_pb from '../../../cs3/tx/v1beta1/resources_pb';
+import * as cs3_types_v1beta1_types_pb from '../../../cs3/types/v1beta1/types_pb';
+
+export class CreateTransferRequest extends jspb.Message {
+  hasRef(): boolean;
+  clearRef(): void;
+  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
+  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
+
+  hasGrantee(): boolean;
+  clearGrantee(): void;
+  getGrantee(): cs3_storage_provider_v1beta1_resources_pb.Grantee | undefined;
+  setGrantee(value?: cs3_storage_provider_v1beta1_resources_pb.Grantee): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateTransferRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateTransferRequest): CreateTransferRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateTransferRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateTransferRequest;
+  static deserializeBinaryFromReader(message: CreateTransferRequest, reader: jspb.BinaryReader): CreateTransferRequest;
+}
+
+export namespace CreateTransferRequest {
+  export type AsObject = {
+    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    grantee?: cs3_storage_provider_v1beta1_resources_pb.Grantee.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class CreateTransferResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasTxInfo(): boolean;
+  clearTxInfo(): void;
+  getTxInfo(): cs3_tx_v1beta1_resources_pb.TxInfo | undefined;
+  setTxInfo(value?: cs3_tx_v1beta1_resources_pb.TxInfo): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CreateTransferResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CreateTransferResponse): CreateTransferResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CreateTransferResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CreateTransferResponse;
+  static deserializeBinaryFromReader(message: CreateTransferResponse, reader: jspb.BinaryReader): CreateTransferResponse;
+}
+
+export namespace CreateTransferResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    txInfo?: cs3_tx_v1beta1_resources_pb.TxInfo.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetTransferStatusRequest extends jspb.Message {
+  hasTxId(): boolean;
+  clearTxId(): void;
+  getTxId(): cs3_tx_v1beta1_resources_pb.TxId | undefined;
+  setTxId(value?: cs3_tx_v1beta1_resources_pb.TxId): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetTransferStatusRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: GetTransferStatusRequest): GetTransferStatusRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetTransferStatusRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetTransferStatusRequest;
+  static deserializeBinaryFromReader(message: GetTransferStatusRequest, reader: jspb.BinaryReader): GetTransferStatusRequest;
+}
+
+export namespace GetTransferStatusRequest {
+  export type AsObject = {
+    txId?: cs3_tx_v1beta1_resources_pb.TxId.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class GetTransferStatusResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasTxInfo(): boolean;
+  clearTxInfo(): void;
+  getTxInfo(): cs3_tx_v1beta1_resources_pb.TxInfo | undefined;
+  setTxInfo(value?: cs3_tx_v1beta1_resources_pb.TxInfo): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): GetTransferStatusResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: GetTransferStatusResponse): GetTransferStatusResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: GetTransferStatusResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): GetTransferStatusResponse;
+  static deserializeBinaryFromReader(message: GetTransferStatusResponse, reader: jspb.BinaryReader): GetTransferStatusResponse;
+}
+
+export namespace GetTransferStatusResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    txInfo?: cs3_tx_v1beta1_resources_pb.TxInfo.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class CancelTransferRequest extends jspb.Message {
+  hasTxId(): boolean;
+  clearTxId(): void;
+  getTxId(): cs3_tx_v1beta1_resources_pb.TxId | undefined;
+  setTxId(value?: cs3_tx_v1beta1_resources_pb.TxId): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CancelTransferRequest.AsObject;
+  static toObject(includeInstance: boolean, msg: CancelTransferRequest): CancelTransferRequest.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CancelTransferRequest, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CancelTransferRequest;
+  static deserializeBinaryFromReader(message: CancelTransferRequest, reader: jspb.BinaryReader): CancelTransferRequest;
+}
+
+export namespace CancelTransferRequest {
+  export type AsObject = {
+    txId?: cs3_tx_v1beta1_resources_pb.TxId.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
+export class CancelTransferResponse extends jspb.Message {
+  hasStatus(): boolean;
+  clearStatus(): void;
+  getStatus(): cs3_rpc_v1beta1_status_pb.Status | undefined;
+  setStatus(value?: cs3_rpc_v1beta1_status_pb.Status): void;
+
+  hasTxInfo(): boolean;
+  clearTxInfo(): void;
+  getTxInfo(): cs3_tx_v1beta1_resources_pb.TxInfo | undefined;
+  setTxInfo(value?: cs3_tx_v1beta1_resources_pb.TxInfo): void;
+
+  hasOpaque(): boolean;
+  clearOpaque(): void;
+  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
+  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): CancelTransferResponse.AsObject;
+  static toObject(includeInstance: boolean, msg: CancelTransferResponse): CancelTransferResponse.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: CancelTransferResponse, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): CancelTransferResponse;
+  static deserializeBinaryFromReader(message: CancelTransferResponse, reader: jspb.BinaryReader): CancelTransferResponse;
+}
+
+export namespace CancelTransferResponse {
+  export type AsObject = {
+    status?: cs3_rpc_v1beta1_status_pb.Status.AsObject,
+    txInfo?: cs3_tx_v1beta1_resources_pb.TxInfo.AsObject,
+    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
+  }
+}
+
diff --git a/cs3/types/v1beta1/types_pb.d.ts b/cs3/types/v1beta1/types_pb.d.ts
new file mode 100644
index 0000000..d2a0780
--- /dev/null
+++ b/cs3/types/v1beta1/types_pb.d.ts
@@ -0,0 +1,74 @@
+// package: cs3.types.v1beta1
+// file: cs3/types/v1beta1/types.proto
+
+import * as jspb from 'google-protobuf';
+
+export class Opaque extends jspb.Message {
+  getMapMap(): jspb.Map<string, OpaqueEntry>;
+  clearMapMap(): void;
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Opaque.AsObject;
+  static toObject(includeInstance: boolean, msg: Opaque): Opaque.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Opaque, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Opaque;
+  static deserializeBinaryFromReader(message: Opaque, reader: jspb.BinaryReader): Opaque;
+}
+
+export namespace Opaque {
+  export type AsObject = {
+    mapMap: Array<[string, OpaqueEntry.AsObject]>,
+  }
+}
+
+export class OpaqueEntry extends jspb.Message {
+  getDecoder(): string;
+  setDecoder(value: string): void;
+
+  getValue(): Uint8Array | string;
+  getValue_asU8(): Uint8Array;
+  getValue_asB64(): string;
+  setValue(value: Uint8Array | string): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): OpaqueEntry.AsObject;
+  static toObject(includeInstance: boolean, msg: OpaqueEntry): OpaqueEntry.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: OpaqueEntry, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): OpaqueEntry;
+  static deserializeBinaryFromReader(message: OpaqueEntry, reader: jspb.BinaryReader): OpaqueEntry;
+}
+
+export namespace OpaqueEntry {
+  export type AsObject = {
+    decoder: string,
+    value: Uint8Array | string,
+  }
+}
+
+export class Timestamp extends jspb.Message {
+  getSeconds(): number;
+  setSeconds(value: number): void;
+
+  getNanos(): number;
+  setNanos(value: number): void;
+
+  serializeBinary(): Uint8Array;
+  toObject(includeInstance?: boolean): Timestamp.AsObject;
+  static toObject(includeInstance: boolean, msg: Timestamp): Timestamp.AsObject;
+  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
+  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
+  static serializeBinaryToWriter(message: Timestamp, writer: jspb.BinaryWriter): void;
+  static deserializeBinary(bytes: Uint8Array): Timestamp;
+  static deserializeBinaryFromReader(message: Timestamp, reader: jspb.BinaryReader): Timestamp;
+}
+
+export namespace Timestamp {
+  export type AsObject = {
+    seconds: number,
+    nanos: number,
+  }
+}
+
diff --git a/examples/example.js b/examples/example.js
new file mode 100644
index 0000000..a8202b2
--- /dev/null
+++ b/examples/example.js
@@ -0,0 +1,78 @@
+const grpc = require('@grpc/grpc-js');
+const services = require('../cs3/gateway/v1beta1/gateway_api_grpc_pb');
+const messages = require('../cs3/gateway/v1beta1/gateway_api_pb');
+const { ListReceivedOCMSharesRequest } = require('../cs3/sharing/ocm/v1beta1/ocm_api_pb');
+
+// Specifies the name of the Reva access token used during requests.
+// Align this string with the server expects, in the case of revad see:
+// https://github.com/cs3org/reva/blob/v1.11.0/pkg/token/token.go#L30
+const TOKEN_HEADER = 'x-access-token';
+
+const TARGET = process.env.TARGET || 'localhost:19000';
+
+
+const client = new services.GatewayAPIClient(
+  TARGET,
+  grpc.credentials.createInsecure()
+);
+
+async function authenticate() {
+  const req = new messages.AuthenticateRequest();
+  req.setType('basic');
+  req.setClientId('einstein');
+  req.setClientSecret('relativity');
+  const res = await new Promise((resolve, reject) => client.authenticate(req, (err, res) => {
+    if (err) {
+      reject(err);
+    }
+    resolve(res)
+  }));
+
+  // See AuthenticateResponse https://github.com/cs3org/cs3apis/blob/a86e5cb6ac360/cs3/gateway/v1beta1/gateway_api.proto#L415
+  // * User https://github.com/cs3org/cs3apis/blob/a86e5cb6ac360/cs3/identity/user/v1beta1/resources.proto#L53
+  const user = res.getUser();
+  console.log('DisplayName from AuthenticateResponse:', user ? user.getDisplayName() : '?');
+
+  // add the token to the metadata for subsequent client calls
+  const token = res.getToken();
+  // one exception is the 'WhoAmI' method, which takes the token as a request parameter
+  return token;
+}
+
+async function whoAmI(token) {
+  const req = new messages.WhoAmIRequest();
+  req.setToken(token);
+  const res = await new Promise((resolve, reject) => client.whoAmI(req, (err, res) => {
+    if (err) {
+      reject(err);
+    }
+    resolve(res)
+  }));
+  const user = res.getUser();
+  console.log('DisplayName from WhoAmIResponse:', user? user.getDisplayName() : '?');
+}
+
+async function listReceivedOCMShares(metadata) {
+  const req = new ListReceivedOCMSharesRequest();
+  // req.setToken(token);
+  const shares = await new Promise((resolve, reject) => client.listReceivedOCMShares(req, metadata, (err, res) => {
+    if (err) {
+      reject(err);
+    }
+    resolve(res)
+  }));
+  console.log('SharesList from ListReceivedOCMSharesResponse:', shares.getSharesList());
+}
+
+async function example() {
+  const token = await authenticate();
+  await whoAmI(token);
+
+  const metadata = new grpc.Metadata();
+  metadata.add(TOKEN_HEADER, token);
+
+  await listReceivedOCMShares(metadata);
+}
+
+// ...
+example();
\ No newline at end of file
diff --git a/examples/example.ts b/examples/example.ts
new file mode 100644
index 0000000..f04f6bd
--- /dev/null
+++ b/examples/example.ts
@@ -0,0 +1,89 @@
+import { Metadata, credentials, ServiceError } from '@grpc/grpc-js';
+import { GatewayAPIClient } from '../cs3/gateway/v1beta1/gateway_api_grpc_pb';
+import {
+  AuthenticateRequest,
+  AuthenticateResponse,
+  WhoAmIRequest,
+  WhoAmIResponse
+} from '../cs3/gateway/v1beta1/gateway_api_pb';
+import { ListReceivedOCMSharesRequest, ListReceivedOCMSharesResponse } from '../cs3/sharing/ocm/v1beta1/ocm_api_pb';
+
+// Specifies the name of the Reva access token used during requests.
+// Align this string with the server expects, in the case of revad see:
+// https://github.com/cs3org/reva/blob/v1.11.0/pkg/token/token.go#L30
+const TOKEN_HEADER = 'x-access-token';
+
+const TARGET = process.env.TARGET || 'localhost:19000';
+
+
+const client = new GatewayAPIClient(
+  TARGET,
+  credentials.createInsecure()
+);
+
+async function authenticate() {
+  const req = new AuthenticateRequest();
+  req.setType('basic');
+  req.setClientId('einstein');
+  req.setClientSecret('relativity');
+  const res: AuthenticateResponse = await new Promise((resolve, reject) => {
+    client.authenticate(req, (err: ServiceError | null, res: AuthenticateResponse) => {
+      if (err) {
+        reject(err);
+      }
+      resolve(res)
+    })
+  });
+
+  // See AuthenticateResponse https://github.com/cs3org/cs3apis/blob/a86e5cb6ac360/cs3/gateway/v1beta1/gateway_api.proto#L415
+  // * User https://github.com/cs3org/cs3apis/blob/a86e5cb6ac360/cs3/identity/user/v1beta1/resources.proto#L53
+  const user = res.getUser();
+  console.log('DisplayName from AuthenticateResponse:', user ? user.getDisplayName() : '?');
+
+  // add the token to the metadata for subsequent client calls
+  const token = res.getToken();
+  // one exception is the 'WhoAmI' method, which takes the token as a request parameter
+  return token;
+}
+
+async function whoAmI(token: string) {
+  const req = new WhoAmIRequest();
+  req.setToken(token);
+  const res: WhoAmIResponse = await new Promise((resolve, reject) => {
+    client.whoAmI(req, (err: ServiceError | null, res: WhoAmIResponse) => {
+      if (err) {
+        reject(err);
+      }
+      resolve(res)
+    })
+  });
+  const user = res.getUser();
+  console.log('DisplayName from WhoAmIResponse:', user? user.getDisplayName() : '?');
+}
+
+async function listReceivedOCMShares(metadata: Metadata) {
+  const req = new ListReceivedOCMSharesRequest();
+  // req.setToken(token);
+  const shares: ListReceivedOCMSharesResponse = await new Promise((resolve, reject) => {
+    client.listReceivedOCMShares(req, metadata, (err: ServiceError | null, res: ListReceivedOCMSharesResponse) => {
+      if (err) {
+        reject(err);
+      }
+      resolve(res)
+    })
+  });
+  console.log('SharesList from ListReceivedOCMSharesResponse:', shares.getSharesList());
+}
+
+async function example() {
+  const token = await authenticate();
+  await whoAmI(token);
+
+  const metadata = new Metadata();
+  metadata.add(TOKEN_HEADER, token);
+
+  await listReceivedOCMShares(metadata);
+}
+
+// ...
+example();
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 63af079..4207b49 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,1424 +1,133 @@
 {
   "name": "@cs3org/node-cs3apis",
   "version": "0.0.25",
-  "lockfileVersion": 2,
+  "lockfileVersion": 1,
   "requires": true,
-  "packages": {
-    "": {
-      "name": "@cs3org/node-cs3apis",
-      "version": "0.0.3",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "google-protobuf": "^3.13.0",
-        "grpc": "^1.24.6"
-      }
-    },
-    "node_modules/@types/bytebuffer": {
-      "version": "5.0.42",
-      "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.42.tgz",
-      "integrity": "sha512-lEgKojWUAc/MG2t649oZS5AfYFP2xRNPoDuwDBlBMjHXd8MaGPgFgtCXUK7inZdBOygmVf10qxc1Us8GXC96aw==",
-      "dependencies": {
-        "@types/long": "*",
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/long": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
-      "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
-    },
-    "node_modules/@types/node": {
-      "version": "14.14.37",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz",
-      "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw=="
-    },
-    "node_modules/abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
-    },
-    "node_modules/ansi-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/aproba": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
-    },
-    "node_modules/are-we-there-yet": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
-      "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
-      "dependencies": {
-        "delegates": "^1.0.0",
-        "readable-stream": "^2.0.6"
-      }
-    },
-    "node_modules/ascli": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
-      "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
-      "dependencies": {
-        "colour": "~0.7.1",
-        "optjs": "~3.2.2"
-      }
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
-    },
-    "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/bytebuffer": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
-      "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
-      "dependencies": {
-        "long": "~3"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/camelcase": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/chownr": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
-      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
-    },
-    "node_modules/cliui": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-      "dependencies": {
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1",
-        "wrap-ansi": "^2.0.0"
-      }
-    },
-    "node_modules/code-point-at": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/colour": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
-      "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=",
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
-    },
-    "node_modules/console-control-strings": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
-    },
-    "node_modules/core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-    },
-    "node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/decamelize": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/deep-extend": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
-      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/delegates": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
-    },
-    "node_modules/detect-libc": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
-      "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
-      "bin": {
-        "detect-libc": "bin/detect-libc.js"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/fs-minipass": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
-      "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
-      "dependencies": {
-        "minipass": "^2.6.0"
-      }
-    },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
-    },
-    "node_modules/gauge": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
-      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
-      "dependencies": {
-        "aproba": "^1.0.3",
-        "console-control-strings": "^1.0.0",
-        "has-unicode": "^2.0.0",
-        "object-assign": "^4.1.0",
-        "signal-exit": "^3.0.0",
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1",
-        "wide-align": "^1.1.0"
-      }
-    },
-    "node_modules/glob": {
-      "version": "7.1.6",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/google-protobuf": {
-      "version": "3.15.8",
-      "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.15.8.tgz",
-      "integrity": "sha512-2jtfdqTaSxk0cuBJBtTTWsot4WtR9RVr2rXg7x7OoqiuOKopPrwXpM1G4dXIkLcUNRh3RKzz76C8IOkksZSeOw=="
-    },
-    "node_modules/grpc": {
-      "version": "1.24.6",
-      "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.6.tgz",
-      "integrity": "sha512-BtifKdClMYU0ZEo0Pdr2WV9ZH54AoEdIcp2BfJkh87g2R3HoNPLYKHRYefw/ByxrCdVDTAy3hkraFISpqsRcrw==",
-      "hasInstallScript": true,
-      "dependencies": {
-        "@types/bytebuffer": "^5.0.40",
-        "lodash.camelcase": "^4.3.0",
-        "lodash.clone": "^4.5.0",
-        "nan": "^2.13.2",
-        "node-pre-gyp": "^0.16.0",
-        "protobufjs": "^5.0.3"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/has-unicode": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
-      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
-    },
-    "node_modules/iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/ignore-walk": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
-      "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
-      "dependencies": {
-        "minimatch": "^3.0.4"
-      }
-    },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-    },
-    "node_modules/ini": {
-      "version": "1.3.8",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
-      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
-    },
-    "node_modules/invert-kv": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
-      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-fullwidth-code-point": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-      "dependencies": {
-        "number-is-nan": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
-    },
-    "node_modules/lcid": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
-      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-      "dependencies": {
-        "invert-kv": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/lodash.camelcase": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
-      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
-    },
-    "node_modules/lodash.clone": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
-      "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
-    },
-    "node_modules/long": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
-      "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=",
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
-    },
-    "node_modules/minipass": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
-      "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
-      "dependencies": {
-        "safe-buffer": "^5.1.2",
-        "yallist": "^3.0.0"
-      }
-    },
-    "node_modules/minizlib": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
-      "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
-      "dependencies": {
-        "minipass": "^2.9.0"
-      }
-    },
-    "node_modules/mkdirp": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-      "dependencies": {
-        "minimist": "^1.2.5"
-      },
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      }
-    },
-    "node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
-    },
-    "node_modules/nan": {
-      "version": "2.14.2",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
-      "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
-    },
-    "node_modules/needle": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz",
-      "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==",
-      "dependencies": {
-        "debug": "^3.2.6",
-        "iconv-lite": "^0.4.4",
-        "sax": "^1.2.4"
-      },
-      "bin": {
-        "needle": "bin/needle"
-      },
-      "engines": {
-        "node": ">= 4.4.x"
-      }
-    },
-    "node_modules/node-pre-gyp": {
-      "version": "0.16.0",
-      "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.16.0.tgz",
-      "integrity": "sha512-4efGA+X/YXAHLi1hN8KaPrILULaUn2nWecFrn1k2I+99HpoyvcOGEbtcOxpDiUwPF2ZANMJDh32qwOUPenuR1g==",
-      "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future",
-      "dependencies": {
-        "detect-libc": "^1.0.2",
-        "mkdirp": "^0.5.3",
-        "needle": "^2.5.0",
-        "nopt": "^4.0.1",
-        "npm-packlist": "^1.1.6",
-        "npmlog": "^4.0.2",
-        "rc": "^1.2.7",
-        "rimraf": "^2.6.1",
-        "semver": "^5.3.0",
-        "tar": "^4.4.2"
-      },
-      "bin": {
-        "node-pre-gyp": "bin/node-pre-gyp"
-      }
-    },
-    "node_modules/nopt": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
-      "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
-      "dependencies": {
-        "abbrev": "1",
-        "osenv": "^0.1.4"
-      },
-      "bin": {
-        "nopt": "bin/nopt.js"
-      }
-    },
-    "node_modules/npm-bundled": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
-      "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
-      "dependencies": {
-        "npm-normalize-package-bin": "^1.0.1"
-      }
-    },
-    "node_modules/npm-normalize-package-bin": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
-      "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
-    },
-    "node_modules/npm-packlist": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
-      "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
-      "dependencies": {
-        "ignore-walk": "^3.0.1",
-        "npm-bundled": "^1.0.1",
-        "npm-normalize-package-bin": "^1.0.1"
-      }
-    },
-    "node_modules/npmlog": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
-      "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
-      "dependencies": {
-        "are-we-there-yet": "~1.1.2",
-        "console-control-strings": "~1.1.0",
-        "gauge": "~2.7.3",
-        "set-blocking": "~2.0.0"
-      }
-    },
-    "node_modules/number-is-nan": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/optjs": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
-      "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
-    },
-    "node_modules/os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/os-locale": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
-      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-      "dependencies": {
-        "lcid": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "dependencies": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.0"
-      }
-    },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
-    },
-    "node_modules/protobufjs": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
-      "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
-      "dependencies": {
-        "ascli": "~1",
-        "bytebuffer": "~5",
-        "glob": "^7.0.5",
-        "yargs": "^3.10.0"
-      },
-      "bin": {
-        "pbjs": "bin/pbjs"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/rc": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
-      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
-      "dependencies": {
-        "deep-extend": "^0.6.0",
-        "ini": "~1.3.0",
-        "minimist": "^1.2.0",
-        "strip-json-comments": "~2.0.1"
-      },
-      "bin": {
-        "rc": "cli.js"
-      }
-    },
-    "node_modules/readable-stream": {
-      "version": "2.3.7",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-      "dependencies": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "node_modules/rimraf": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      }
-    },
-    "node_modules/safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-    },
-    "node_modules/safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
-    },
-    "node_modules/sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
-    },
-    "node_modules/semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-      "bin": {
-        "semver": "bin/semver"
-      }
-    },
-    "node_modules/set-blocking": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
-    },
-    "node_modules/signal-exit": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
-      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
-    },
-    "node_modules/string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-      "dependencies": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "node_modules/string-width": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-      "dependencies": {
-        "code-point-at": "^1.0.0",
-        "is-fullwidth-code-point": "^1.0.0",
-        "strip-ansi": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-      "dependencies": {
-        "ansi-regex": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/strip-json-comments": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
-      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/tar": {
-      "version": "4.4.13",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
-      "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
-      "dependencies": {
-        "chownr": "^1.1.1",
-        "fs-minipass": "^1.2.5",
-        "minipass": "^2.8.6",
-        "minizlib": "^1.2.1",
-        "mkdirp": "^0.5.0",
-        "safe-buffer": "^5.1.2",
-        "yallist": "^3.0.3"
-      },
-      "engines": {
-        "node": ">=4.5"
-      }
-    },
-    "node_modules/util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
-    },
-    "node_modules/wide-align": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
-      "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
-      "dependencies": {
-        "string-width": "^1.0.2 || 2"
-      }
-    },
-    "node_modules/window-size": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
-      "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
-      "bin": {
-        "window-size": "cli.js"
-      },
-      "engines": {
-        "node": ">= 0.10.0"
-      }
-    },
-    "node_modules/wrap-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-      "dependencies": {
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-    },
-    "node_modules/y18n": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
-      "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
-    },
-    "node_modules/yallist": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
-    },
-    "node_modules/yargs": {
-      "version": "3.32.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
-      "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
-      "dependencies": {
-        "camelcase": "^2.0.1",
-        "cliui": "^3.0.3",
-        "decamelize": "^1.1.1",
-        "os-locale": "^1.4.0",
-        "string-width": "^1.0.1",
-        "window-size": "^0.1.4",
-        "y18n": "^3.2.0"
-      }
-    }
-  },
   "dependencies": {
-    "@types/bytebuffer": {
-      "version": "5.0.42",
-      "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.42.tgz",
-      "integrity": "sha512-lEgKojWUAc/MG2t649oZS5AfYFP2xRNPoDuwDBlBMjHXd8MaGPgFgtCXUK7inZdBOygmVf10qxc1Us8GXC96aw==",
-      "requires": {
-        "@types/long": "*",
-        "@types/node": "*"
-      }
+    "@cspotcode/source-map-consumer": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
+      "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
+      "dev": true
     },
-    "@types/long": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
-      "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
-    },
-    "@types/node": {
-      "version": "14.14.37",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz",
-      "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw=="
-    },
-    "abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
-    },
-    "ansi-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-    },
-    "aproba": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
-    },
-    "are-we-there-yet": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
-      "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
-      "requires": {
-        "delegates": "^1.0.0",
-        "readable-stream": "^2.0.6"
-      }
-    },
-    "ascli": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
-      "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
-      "requires": {
-        "colour": "~0.7.1",
-        "optjs": "~3.2.2"
-      }
-    },
-    "balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
-    },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "bytebuffer": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
-      "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
-      "requires": {
-        "long": "~3"
-      }
-    },
-    "camelcase": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
-    },
-    "chownr": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
-      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
-    },
-    "cliui": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-      "requires": {
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1",
-        "wrap-ansi": "^2.0.0"
-      }
-    },
-    "code-point-at": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
-    },
-    "colour": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
-      "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
-    },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
-    },
-    "console-control-strings": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
-    },
-    "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-    },
-    "debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "requires": {
-        "ms": "^2.1.1"
-      }
-    },
-    "decamelize": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
-    },
-    "deep-extend": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
-      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
-    },
-    "delegates": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
-    },
-    "detect-libc": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
-      "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
-    },
-    "fs-minipass": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
-      "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
-      "requires": {
-        "minipass": "^2.6.0"
-      }
-    },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
-    },
-    "gauge": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
-      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+    "@cspotcode/source-map-support": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz",
+      "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==",
+      "dev": true,
       "requires": {
-        "aproba": "^1.0.3",
-        "console-control-strings": "^1.0.0",
-        "has-unicode": "^2.0.0",
-        "object-assign": "^4.1.0",
-        "signal-exit": "^3.0.0",
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1",
-        "wide-align": "^1.1.0"
+        "@cspotcode/source-map-consumer": "0.8.0"
       }
     },
-    "glob": {
-      "version": "7.1.6",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+    "@grpc/grpc-js": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz",
+      "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==",
       "requires": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
+        "@types/node": ">=12.12.47"
       }
     },
-    "google-protobuf": {
-      "version": "3.15.8",
-      "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.15.8.tgz",
-      "integrity": "sha512-2jtfdqTaSxk0cuBJBtTTWsot4WtR9RVr2rXg7x7OoqiuOKopPrwXpM1G4dXIkLcUNRh3RKzz76C8IOkksZSeOw=="
-    },
-    "grpc": {
-      "version": "1.24.6",
-      "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.6.tgz",
-      "integrity": "sha512-BtifKdClMYU0ZEo0Pdr2WV9ZH54AoEdIcp2BfJkh87g2R3HoNPLYKHRYefw/ByxrCdVDTAy3hkraFISpqsRcrw==",
-      "requires": {
-        "@types/bytebuffer": "^5.0.40",
-        "lodash.camelcase": "^4.3.0",
-        "lodash.clone": "^4.5.0",
-        "nan": "^2.13.2",
-        "node-pre-gyp": "^0.16.0",
-        "protobufjs": "^5.0.3"
-      }
-    },
-    "has-unicode": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
-      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
-    },
-    "iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "requires": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      }
-    },
-    "ignore-walk": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
-      "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
-      "requires": {
-        "minimatch": "^3.0.4"
-      }
-    },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-    },
-    "ini": {
-      "version": "1.3.8",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
-      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
-    },
-    "invert-kv": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
-      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
-    },
-    "is-fullwidth-code-point": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-      "requires": {
-        "number-is-nan": "^1.0.0"
-      }
-    },
-    "isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+    "@tsconfig/node10": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
+      "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
+      "dev": true
     },
-    "lcid": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
-      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-      "requires": {
-        "invert-kv": "^1.0.0"
-      }
-    },
-    "lodash.camelcase": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
-      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+    "@tsconfig/node12": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
+      "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
+      "dev": true
     },
-    "lodash.clone": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
-      "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
-    },
-    "long": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
-      "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
-    },
-    "minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-      "requires": {
-        "brace-expansion": "^1.1.7"
-      }
-    },
-    "minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
-    },
-    "minipass": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
-      "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
-      "requires": {
-        "safe-buffer": "^5.1.2",
-        "yallist": "^3.0.0"
-      }
-    },
-    "minizlib": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
-      "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
-      "requires": {
-        "minipass": "^2.9.0"
-      }
-    },
-    "mkdirp": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-      "requires": {
-        "minimist": "^1.2.5"
-      }
-    },
-    "ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
-    },
-    "nan": {
-      "version": "2.14.2",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
-      "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
-    },
-    "needle": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz",
-      "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==",
-      "requires": {
-        "debug": "^3.2.6",
-        "iconv-lite": "^0.4.4",
-        "sax": "^1.2.4"
-      }
-    },
-    "node-pre-gyp": {
-      "version": "0.16.0",
-      "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.16.0.tgz",
-      "integrity": "sha512-4efGA+X/YXAHLi1hN8KaPrILULaUn2nWecFrn1k2I+99HpoyvcOGEbtcOxpDiUwPF2ZANMJDh32qwOUPenuR1g==",
-      "requires": {
-        "detect-libc": "^1.0.2",
-        "mkdirp": "^0.5.3",
-        "needle": "^2.5.0",
-        "nopt": "^4.0.1",
-        "npm-packlist": "^1.1.6",
-        "npmlog": "^4.0.2",
-        "rc": "^1.2.7",
-        "rimraf": "^2.6.1",
-        "semver": "^5.3.0",
-        "tar": "^4.4.2"
-      }
-    },
-    "nopt": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
-      "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
-      "requires": {
-        "abbrev": "1",
-        "osenv": "^0.1.4"
-      }
-    },
-    "npm-bundled": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
-      "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
-      "requires": {
-        "npm-normalize-package-bin": "^1.0.1"
-      }
-    },
-    "npm-normalize-package-bin": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
-      "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
-    },
-    "npm-packlist": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
-      "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
-      "requires": {
-        "ignore-walk": "^3.0.1",
-        "npm-bundled": "^1.0.1",
-        "npm-normalize-package-bin": "^1.0.1"
-      }
-    },
-    "npmlog": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
-      "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
-      "requires": {
-        "are-we-there-yet": "~1.1.2",
-        "console-control-strings": "~1.1.0",
-        "gauge": "~2.7.3",
-        "set-blocking": "~2.0.0"
-      }
-    },
-    "number-is-nan": {
+    "@tsconfig/node14": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
-    },
-    "object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+      "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
+      "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
+      "dev": true
     },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "optjs": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
-      "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
-    },
-    "os-homedir": {
+    "@tsconfig/node16": {
       "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
-    },
-    "os-locale": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
-      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-      "requires": {
-        "lcid": "^1.0.0"
-      }
-    },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
-    },
-    "osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "requires": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.0"
-      }
-    },
-    "path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
-    },
-    "process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
-    },
-    "protobufjs": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
-      "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
-      "requires": {
-        "ascli": "~1",
-        "bytebuffer": "~5",
-        "glob": "^7.0.5",
-        "yargs": "^3.10.0"
-      }
-    },
-    "rc": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
-      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
-      "requires": {
-        "deep-extend": "^0.6.0",
-        "ini": "~1.3.0",
-        "minimist": "^1.2.0",
-        "strip-json-comments": "~2.0.1"
-      }
+      "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
+      "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
+      "dev": true
     },
-    "readable-stream": {
-      "version": "2.3.7",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-      "requires": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "rimraf": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-      "requires": {
-        "glob": "^7.1.3"
-      }
-    },
-    "safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-    },
-    "safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
-    },
-    "sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
-    },
-    "semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
-    },
-    "set-blocking": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
-    },
-    "signal-exit": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
-      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
-    },
-    "string_decoder": {
+    "@types/node": {
+      "version": "16.10.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz",
+      "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ=="
+    },
+    "acorn": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
+      "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
+      "dev": true
+    },
+    "acorn-walk": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+      "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+      "dev": true
+    },
+    "arg": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+      "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+      "dev": true
+    },
+    "create-require": {
       "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-      "requires": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "string-width": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-      "requires": {
-        "code-point-at": "^1.0.0",
-        "is-fullwidth-code-point": "^1.0.0",
-        "strip-ansi": "^3.0.0"
-      }
+      "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+      "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+      "dev": true
     },
-    "strip-ansi": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-      "requires": {
-        "ansi-regex": "^2.0.0"
-      }
+    "diff": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+      "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+      "dev": true
     },
-    "strip-json-comments": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
-      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
-    },
-    "tar": {
-      "version": "4.4.13",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
-      "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
-      "requires": {
-        "chownr": "^1.1.1",
-        "fs-minipass": "^1.2.5",
-        "minipass": "^2.8.6",
-        "minizlib": "^1.2.1",
-        "mkdirp": "^0.5.0",
-        "safe-buffer": "^5.1.2",
-        "yallist": "^3.0.3"
-      }
-    },
-    "util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
-    },
-    "wide-align": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
-      "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
-      "requires": {
-        "string-width": "^1.0.2 || 2"
-      }
-    },
-    "window-size": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
-      "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
-    },
-    "wrap-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-      "requires": {
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1"
-      }
-    },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-    },
-    "y18n": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
-      "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
-    },
-    "yallist": {
+    "google-protobuf": {
+      "version": "3.18.1",
+      "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.18.1.tgz",
+      "integrity": "sha512-cDqSamZ8rGs+pOzhIsBte7wpezUKg/sggeptDWN5odhnRY/eDLa5VWLeNeQvcfiqjS3yUwgM+6OePCJMB7aWZA=="
+    },
+    "make-error": {
+      "version": "1.3.6",
+      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+      "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+      "dev": true
+    },
+    "ts-node": {
+      "version": "10.2.1",
+      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz",
+      "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==",
+      "dev": true,
+      "requires": {
+        "@cspotcode/source-map-support": "0.6.1",
+        "@tsconfig/node10": "^1.0.7",
+        "@tsconfig/node12": "^1.0.7",
+        "@tsconfig/node14": "^1.0.0",
+        "@tsconfig/node16": "^1.0.2",
+        "acorn": "^8.4.1",
+        "acorn-walk": "^8.1.1",
+        "arg": "^4.1.0",
+        "create-require": "^1.1.0",
+        "diff": "^4.0.1",
+        "make-error": "^1.1.1",
+        "yn": "3.1.1"
+      }
+    },
+    "typescript": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz",
+      "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==",
+      "dev": true
+    },
+    "yn": {
       "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
-    },
-    "yargs": {
-      "version": "3.32.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
-      "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
-      "requires": {
-        "camelcase": "^2.0.1",
-        "cliui": "^3.0.3",
-        "decamelize": "^1.1.1",
-        "os-locale": "^1.4.0",
-        "string-width": "^1.0.1",
-        "window-size": "^0.1.4",
-        "y18n": "^3.2.0"
-      }
+      "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+      "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+      "dev": true
     }
   }
 }
diff --git a/package.json b/package.json
index a6c9474..b5d4985 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,11 @@
   },
   "homepage": "https://github.com/cs3org/node-cs3apis#readme",
   "dependencies": {
-    "google-protobuf": "^3.13.0",
-    "grpc": "^1.24.6"
+    "@grpc/grpc-js": "^1.3.7",
+    "google-protobuf": "^3.13.0"
+  },
+  "devDependencies": {
+    "ts-node": "^10.2.1",
+    "typescript": "^4.4.3"
   }
 }

From 8677259eced6b88b9650a487c17f597d13583aeb Mon Sep 17 00:00:00 2001
From: Michiel de Jong <michiel@unhosted.org>
Date: Tue, 2 Nov 2021 16:27:15 +0100
Subject: [PATCH 2/2] Re-run commands from
 https://github.com/cs3org/node-cs3apis/issues/9#issuecomment-939962741

---
 cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts  |  56 +-
 cs3/gateway/v1beta1/gateway_api_grpc_pb.js    |  84 +-
 cs3/gateway/v1beta1/gateway_api_pb.d.ts       | 108 ---
 cs3/gateway/v1beta1/gateway_api_pb.js         | 876 ------------------
 cs3/identity/group/v1beta1/group_api_pb.d.ts  |  12 +
 cs3/identity/group/v1beta1/group_api_pb.js    |  96 +-
 cs3/identity/user/v1beta1/user_api_pb.d.ts    |  12 +
 cs3/identity/user/v1beta1/user_api_pb.js      |  96 +-
 .../provider/v1beta1/provider_api_pb.d.ts     |  12 +
 .../provider/v1beta1/provider_api_pb.js       |  96 +-
 10 files changed, 385 insertions(+), 1063 deletions(-)

diff --git a/cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts b/cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts
index b08bc3c..6fce137 100644
--- a/cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts
+++ b/cs3/gateway/v1beta1/gateway_api_grpc_pb.d.ts
@@ -261,22 +261,22 @@ interface IGatewayAPIService_IListFileVersions extends grpc.MethodDefinition<cs3
   responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse>;
 }
 
-interface IGatewayAPIService_IListRecycleStream extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse> {
+interface IGatewayAPIService_IListRecycleStream extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse> {
   path: '/cs3.gateway.v1beta1.GatewayAPI/ListRecycleStream'
   requestStream: false
   responseStream: true
-  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest>;
-  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest>;
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest>;
   responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
   responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
 }
 
-interface IGatewayAPIService_IListRecycle extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse> {
+interface IGatewayAPIService_IListRecycle extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse> {
   path: '/cs3.gateway.v1beta1.GatewayAPI/ListRecycle'
   requestStream: false
   responseStream: false
-  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest>;
-  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest>;
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest>;
   responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
   responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
 }
@@ -291,12 +291,12 @@ interface IGatewayAPIService_IMove extends grpc.MethodDefinition<cs3_storage_pro
   responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse>;
 }
 
-interface IGatewayAPIService_IPurgeRecycle extends grpc.MethodDefinition<cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse> {
+interface IGatewayAPIService_IPurgeRecycle extends grpc.MethodDefinition<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse> {
   path: '/cs3.gateway.v1beta1.GatewayAPI/PurgeRecycle'
   requestStream: false
   responseStream: false
-  requestSerialize: grpc.serialize<cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest>;
-  requestDeserialize: grpc.deserialize<cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest>;
+  requestSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest>;
+  requestDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest>;
   responseSerialize: grpc.serialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
   responseDeserialize: grpc.deserialize<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
 }
@@ -968,10 +968,10 @@ export interface IGatewayAPIServer extends grpc.UntypedServiceImplementation {
   listContainerStream: grpc.handleServerStreamingCall<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerStreamResponse>;
   listContainer: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListContainerRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListContainerResponse>;
   listFileVersions: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse>;
-  listRecycleStream: grpc.handleServerStreamingCall<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
-  listRecycle: grpc.handleUnaryCall<cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
+  listRecycleStream: grpc.handleServerStreamingCall<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  listRecycle: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse>;
   move: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse>;
-  purgeRecycle: grpc.handleUnaryCall<cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
+  purgeRecycle: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse>;
   restoreFileVersion: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse>;
   restoreRecycleItem: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemRequest, cs3_storage_provider_v1beta1_provider_api_pb.RestoreRecycleItemResponse>;
   stat: grpc.handleUnaryCall<cs3_storage_provider_v1beta1_provider_api_pb.StatRequest, cs3_storage_provider_v1beta1_provider_api_pb.StatResponse>;
@@ -1084,17 +1084,17 @@ export interface IGatewayAPIClient {
   listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
   listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
   listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
-  listRecycleStream(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
-  listRecycleStream(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
-  listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
-  listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
-  listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  listRecycleStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  listRecycleStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
   move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
   move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
   move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
-  purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
-  purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
-  purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
   restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
   restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
   restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
@@ -1338,17 +1338,17 @@ export class GatewayAPIClient extends grpc.Client implements IGatewayAPIClient {
   public listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
   public listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
   public listFileVersions(request: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse) => void): grpc.ClientUnaryCall;
-  public listRecycleStream(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
-  public listRecycleStream(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
-  public listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
-  public listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
-  public listRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  public listRecycleStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  public listRecycleStream(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse>;
+  public listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  public listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
+  public listRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse) => void): grpc.ClientUnaryCall;
   public move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
   public move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
   public move(request: cs3_storage_provider_v1beta1_provider_api_pb.MoveRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse) => void): grpc.ClientUnaryCall;
-  public purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
-  public purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
-  public purgeRecycle(request: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  public purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  public purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
+  public purgeRecycle(request: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse) => void): grpc.ClientUnaryCall;
   public restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
   public restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
   public restoreFileVersion(request: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cs3_storage_provider_v1beta1_provider_api_pb.RestoreFileVersionResponse) => void): grpc.ClientUnaryCall;
diff --git a/cs3/gateway/v1beta1/gateway_api_grpc_pb.js b/cs3/gateway/v1beta1/gateway_api_grpc_pb.js
index 952c575..52eedbd 100644
--- a/cs3/gateway/v1beta1/gateway_api_grpc_pb.js
+++ b/cs3/gateway/v1beta1/gateway_api_grpc_pb.js
@@ -351,28 +351,6 @@ function deserialize_cs3_gateway_v1beta1_ListAuthProvidersResponse(buffer_arg) {
   return cs3_gateway_v1beta1_gateway_api_pb.ListAuthProvidersResponse.deserializeBinary(new Uint8Array(buffer_arg));
 }
 
-function serialize_cs3_gateway_v1beta1_ListRecycleRequest(arg) {
-  if (!(arg instanceof cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest)) {
-    throw new Error('Expected argument of type cs3.gateway.v1beta1.ListRecycleRequest');
-  }
-  return Buffer.from(arg.serializeBinary());
-}
-
-function deserialize_cs3_gateway_v1beta1_ListRecycleRequest(buffer_arg) {
-  return cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest.deserializeBinary(new Uint8Array(buffer_arg));
-}
-
-function serialize_cs3_gateway_v1beta1_ListRecycleStreamRequest(arg) {
-  if (!(arg instanceof cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest)) {
-    throw new Error('Expected argument of type cs3.gateway.v1beta1.ListRecycleStreamRequest');
-  }
-  return Buffer.from(arg.serializeBinary());
-}
-
-function deserialize_cs3_gateway_v1beta1_ListRecycleStreamRequest(buffer_arg) {
-  return cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest.deserializeBinary(new Uint8Array(buffer_arg));
-}
-
 function serialize_cs3_gateway_v1beta1_OpenInAppRequest(arg) {
   if (!(arg instanceof cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest)) {
     throw new Error('Expected argument of type cs3.gateway.v1beta1.OpenInAppRequest');
@@ -384,17 +362,6 @@ function deserialize_cs3_gateway_v1beta1_OpenInAppRequest(buffer_arg) {
   return cs3_gateway_v1beta1_gateway_api_pb.OpenInAppRequest.deserializeBinary(new Uint8Array(buffer_arg));
 }
 
-function serialize_cs3_gateway_v1beta1_PurgeRecycleRequest(arg) {
-  if (!(arg instanceof cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest)) {
-    throw new Error('Expected argument of type cs3.gateway.v1beta1.PurgeRecycleRequest');
-  }
-  return Buffer.from(arg.serializeBinary());
-}
-
-function deserialize_cs3_gateway_v1beta1_PurgeRecycleRequest(buffer_arg) {
-  return cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest.deserializeBinary(new Uint8Array(buffer_arg));
-}
-
 function serialize_cs3_gateway_v1beta1_WhoAmIRequest(arg) {
   if (!(arg instanceof cs3_gateway_v1beta1_gateway_api_pb.WhoAmIRequest)) {
     throw new Error('Expected argument of type cs3.gateway.v1beta1.WhoAmIRequest');
@@ -1616,6 +1583,17 @@ function deserialize_cs3_storage_provider_v1beta1_ListFileVersionsResponse(buffe
   return cs3_storage_provider_v1beta1_provider_api_pb.ListFileVersionsResponse.deserializeBinary(new Uint8Array(buffer_arg));
 }
 
+function serialize_cs3_storage_provider_v1beta1_ListRecycleRequest(arg) {
+  if (!(arg instanceof cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest)) {
+    throw new Error('Expected argument of type cs3.storage.provider.v1beta1.ListRecycleRequest');
+  }
+  return Buffer.from(arg.serializeBinary());
+}
+
+function deserialize_cs3_storage_provider_v1beta1_ListRecycleRequest(buffer_arg) {
+  return cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
 function serialize_cs3_storage_provider_v1beta1_ListRecycleResponse(arg) {
   if (!(arg instanceof cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse)) {
     throw new Error('Expected argument of type cs3.storage.provider.v1beta1.ListRecycleResponse');
@@ -1627,6 +1605,17 @@ function deserialize_cs3_storage_provider_v1beta1_ListRecycleResponse(buffer_arg
   return cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse.deserializeBinary(new Uint8Array(buffer_arg));
 }
 
+function serialize_cs3_storage_provider_v1beta1_ListRecycleStreamRequest(arg) {
+  if (!(arg instanceof cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest)) {
+    throw new Error('Expected argument of type cs3.storage.provider.v1beta1.ListRecycleStreamRequest');
+  }
+  return Buffer.from(arg.serializeBinary());
+}
+
+function deserialize_cs3_storage_provider_v1beta1_ListRecycleStreamRequest(buffer_arg) {
+  return cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
 function serialize_cs3_storage_provider_v1beta1_ListRecycleStreamResponse(arg) {
   if (!(arg instanceof cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse)) {
     throw new Error('Expected argument of type cs3.storage.provider.v1beta1.ListRecycleStreamResponse');
@@ -1682,6 +1671,17 @@ function deserialize_cs3_storage_provider_v1beta1_MoveResponse(buffer_arg) {
   return cs3_storage_provider_v1beta1_provider_api_pb.MoveResponse.deserializeBinary(new Uint8Array(buffer_arg));
 }
 
+function serialize_cs3_storage_provider_v1beta1_PurgeRecycleRequest(arg) {
+  if (!(arg instanceof cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest)) {
+    throw new Error('Expected argument of type cs3.storage.provider.v1beta1.PurgeRecycleRequest');
+  }
+  return Buffer.from(arg.serializeBinary());
+}
+
+function deserialize_cs3_storage_provider_v1beta1_PurgeRecycleRequest(buffer_arg) {
+  return cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
 function serialize_cs3_storage_provider_v1beta1_PurgeRecycleResponse(arg) {
   if (!(arg instanceof cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse)) {
     throw new Error('Expected argument of type cs3.storage.provider.v1beta1.PurgeRecycleResponse');
@@ -2123,10 +2123,10 @@ listRecycleStream: {
     path: '/cs3.gateway.v1beta1.GatewayAPI/ListRecycleStream',
     requestStream: false,
     responseStream: true,
-    requestType: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleStreamRequest,
+    requestType: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamRequest,
     responseType: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleStreamResponse,
-    requestSerialize: serialize_cs3_gateway_v1beta1_ListRecycleStreamRequest,
-    requestDeserialize: deserialize_cs3_gateway_v1beta1_ListRecycleStreamRequest,
+    requestSerialize: serialize_cs3_storage_provider_v1beta1_ListRecycleStreamRequest,
+    requestDeserialize: deserialize_cs3_storage_provider_v1beta1_ListRecycleStreamRequest,
     responseSerialize: serialize_cs3_storage_provider_v1beta1_ListRecycleStreamResponse,
     responseDeserialize: deserialize_cs3_storage_provider_v1beta1_ListRecycleStreamResponse,
   },
@@ -2136,10 +2136,10 @@ listRecycle: {
     path: '/cs3.gateway.v1beta1.GatewayAPI/ListRecycle',
     requestStream: false,
     responseStream: false,
-    requestType: cs3_gateway_v1beta1_gateway_api_pb.ListRecycleRequest,
+    requestType: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleRequest,
     responseType: cs3_storage_provider_v1beta1_provider_api_pb.ListRecycleResponse,
-    requestSerialize: serialize_cs3_gateway_v1beta1_ListRecycleRequest,
-    requestDeserialize: deserialize_cs3_gateway_v1beta1_ListRecycleRequest,
+    requestSerialize: serialize_cs3_storage_provider_v1beta1_ListRecycleRequest,
+    requestDeserialize: deserialize_cs3_storage_provider_v1beta1_ListRecycleRequest,
     responseSerialize: serialize_cs3_storage_provider_v1beta1_ListRecycleResponse,
     responseDeserialize: deserialize_cs3_storage_provider_v1beta1_ListRecycleResponse,
   },
@@ -2165,10 +2165,10 @@ purgeRecycle: {
     path: '/cs3.gateway.v1beta1.GatewayAPI/PurgeRecycle',
     requestStream: false,
     responseStream: false,
-    requestType: cs3_gateway_v1beta1_gateway_api_pb.PurgeRecycleRequest,
+    requestType: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleRequest,
     responseType: cs3_storage_provider_v1beta1_provider_api_pb.PurgeRecycleResponse,
-    requestSerialize: serialize_cs3_gateway_v1beta1_PurgeRecycleRequest,
-    requestDeserialize: deserialize_cs3_gateway_v1beta1_PurgeRecycleRequest,
+    requestSerialize: serialize_cs3_storage_provider_v1beta1_PurgeRecycleRequest,
+    requestDeserialize: deserialize_cs3_storage_provider_v1beta1_PurgeRecycleRequest,
     responseSerialize: serialize_cs3_storage_provider_v1beta1_PurgeRecycleResponse,
     responseDeserialize: deserialize_cs3_storage_provider_v1beta1_PurgeRecycleResponse,
   },
diff --git a/cs3/gateway/v1beta1/gateway_api_pb.d.ts b/cs3/gateway/v1beta1/gateway_api_pb.d.ts
index 8e66e75..ff173a4 100644
--- a/cs3/gateway/v1beta1/gateway_api_pb.d.ts
+++ b/cs3/gateway/v1beta1/gateway_api_pb.d.ts
@@ -183,114 +183,6 @@ export namespace GetQuotaRequest {
   }
 }
 
-export class ListRecycleRequest extends jspb.Message {
-  hasOpaque(): boolean;
-  clearOpaque(): void;
-  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
-  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
-
-  hasRef(): boolean;
-  clearRef(): void;
-  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
-  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
-
-  hasFromTs(): boolean;
-  clearFromTs(): void;
-  getFromTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
-  setFromTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
-
-  hasToTs(): boolean;
-  clearToTs(): void;
-  getToTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
-  setToTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): ListRecycleRequest.AsObject;
-  static toObject(includeInstance: boolean, msg: ListRecycleRequest): ListRecycleRequest.AsObject;
-  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-  static serializeBinaryToWriter(message: ListRecycleRequest, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): ListRecycleRequest;
-  static deserializeBinaryFromReader(message: ListRecycleRequest, reader: jspb.BinaryReader): ListRecycleRequest;
-}
-
-export namespace ListRecycleRequest {
-  export type AsObject = {
-    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
-    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
-    fromTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
-    toTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
-  }
-}
-
-export class ListRecycleStreamRequest extends jspb.Message {
-  hasOpaque(): boolean;
-  clearOpaque(): void;
-  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
-  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
-
-  hasRef(): boolean;
-  clearRef(): void;
-  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
-  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
-
-  hasFromTs(): boolean;
-  clearFromTs(): void;
-  getFromTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
-  setFromTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
-
-  hasToTs(): boolean;
-  clearToTs(): void;
-  getToTs(): cs3_types_v1beta1_types_pb.Timestamp | undefined;
-  setToTs(value?: cs3_types_v1beta1_types_pb.Timestamp): void;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): ListRecycleStreamRequest.AsObject;
-  static toObject(includeInstance: boolean, msg: ListRecycleStreamRequest): ListRecycleStreamRequest.AsObject;
-  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-  static serializeBinaryToWriter(message: ListRecycleStreamRequest, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): ListRecycleStreamRequest;
-  static deserializeBinaryFromReader(message: ListRecycleStreamRequest, reader: jspb.BinaryReader): ListRecycleStreamRequest;
-}
-
-export namespace ListRecycleStreamRequest {
-  export type AsObject = {
-    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
-    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
-    fromTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
-    toTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
-  }
-}
-
-export class PurgeRecycleRequest extends jspb.Message {
-  hasOpaque(): boolean;
-  clearOpaque(): void;
-  getOpaque(): cs3_types_v1beta1_types_pb.Opaque | undefined;
-  setOpaque(value?: cs3_types_v1beta1_types_pb.Opaque): void;
-
-  hasRef(): boolean;
-  clearRef(): void;
-  getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
-  setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): PurgeRecycleRequest.AsObject;
-  static toObject(includeInstance: boolean, msg: PurgeRecycleRequest): PurgeRecycleRequest.AsObject;
-  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
-  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
-  static serializeBinaryToWriter(message: PurgeRecycleRequest, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): PurgeRecycleRequest;
-  static deserializeBinaryFromReader(message: PurgeRecycleRequest, reader: jspb.BinaryReader): PurgeRecycleRequest;
-}
-
-export namespace PurgeRecycleRequest {
-  export type AsObject = {
-    opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
-    ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
-  }
-}
-
 export class InitiateFileDownloadResponse extends jspb.Message {
   hasStatus(): boolean;
   clearStatus(): void;
diff --git a/cs3/gateway/v1beta1/gateway_api_pb.js b/cs3/gateway/v1beta1/gateway_api_pb.js
index 90d3cd6..76b9139 100644
--- a/cs3/gateway/v1beta1/gateway_api_pb.js
+++ b/cs3/gateway/v1beta1/gateway_api_pb.js
@@ -61,11 +61,8 @@ goog.exportSymbol('proto.cs3.gateway.v1beta1.GetQuotaRequest', null, global);
 goog.exportSymbol('proto.cs3.gateway.v1beta1.InitiateFileDownloadResponse', null, global);
 goog.exportSymbol('proto.cs3.gateway.v1beta1.InitiateFileUploadResponse', null, global);
 goog.exportSymbol('proto.cs3.gateway.v1beta1.ListAuthProvidersResponse', null, global);
-goog.exportSymbol('proto.cs3.gateway.v1beta1.ListRecycleRequest', null, global);
-goog.exportSymbol('proto.cs3.gateway.v1beta1.ListRecycleStreamRequest', null, global);
 goog.exportSymbol('proto.cs3.gateway.v1beta1.OpenInAppRequest', null, global);
 goog.exportSymbol('proto.cs3.gateway.v1beta1.OpenInAppRequest.ViewMode', null, global);
-goog.exportSymbol('proto.cs3.gateway.v1beta1.PurgeRecycleRequest', null, global);
 goog.exportSymbol('proto.cs3.gateway.v1beta1.WhoAmIRequest', null, global);
 goog.exportSymbol('proto.cs3.gateway.v1beta1.WhoAmIResponse', null, global);
 /**
@@ -173,69 +170,6 @@ if (goog.DEBUG && !COMPILED) {
    */
   proto.cs3.gateway.v1beta1.GetQuotaRequest.displayName = 'proto.cs3.gateway.v1beta1.GetQuotaRequest';
 }
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.cs3.gateway.v1beta1.ListRecycleRequest, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.cs3.gateway.v1beta1.ListRecycleRequest.displayName = 'proto.cs3.gateway.v1beta1.ListRecycleRequest';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.cs3.gateway.v1beta1.ListRecycleStreamRequest, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.displayName = 'proto.cs3.gateway.v1beta1.ListRecycleStreamRequest';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.cs3.gateway.v1beta1.PurgeRecycleRequest, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.cs3.gateway.v1beta1.PurgeRecycleRequest.displayName = 'proto.cs3.gateway.v1beta1.PurgeRecycleRequest';
-}
 /**
  * Generated by JsPbCodeGenerator.
  * @param {Array=} opt_data Optional initial data array, typically from a
@@ -1481,816 +1415,6 @@ proto.cs3.gateway.v1beta1.GetQuotaRequest.prototype.hasRef = function() {
 
 
 
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.toObject = function(opt_includeInstance) {
-  return proto.cs3.gateway.v1beta1.ListRecycleRequest.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.cs3.gateway.v1beta1.ListRecycleRequest} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
-    ref: (f = msg.getRef()) && cs3_storage_provider_v1beta1_resources_pb.Reference.toObject(includeInstance, f),
-    fromTs: (f = msg.getFromTs()) && cs3_types_v1beta1_types_pb.Timestamp.toObject(includeInstance, f),
-    toTs: (f = msg.getToTs()) && cs3_types_v1beta1_types_pb.Timestamp.toObject(includeInstance, f)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.cs3.gateway.v1beta1.ListRecycleRequest;
-  return proto.cs3.gateway.v1beta1.ListRecycleRequest.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.cs3.gateway.v1beta1.ListRecycleRequest} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = new cs3_types_v1beta1_types_pb.Opaque;
-      reader.readMessage(value,cs3_types_v1beta1_types_pb.Opaque.deserializeBinaryFromReader);
-      msg.setOpaque(value);
-      break;
-    case 2:
-      var value = new cs3_storage_provider_v1beta1_resources_pb.Reference;
-      reader.readMessage(value,cs3_storage_provider_v1beta1_resources_pb.Reference.deserializeBinaryFromReader);
-      msg.setRef(value);
-      break;
-    case 3:
-      var value = new cs3_types_v1beta1_types_pb.Timestamp;
-      reader.readMessage(value,cs3_types_v1beta1_types_pb.Timestamp.deserializeBinaryFromReader);
-      msg.setFromTs(value);
-      break;
-    case 4:
-      var value = new cs3_types_v1beta1_types_pb.Timestamp;
-      reader.readMessage(value,cs3_types_v1beta1_types_pb.Timestamp.deserializeBinaryFromReader);
-      msg.setToTs(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.cs3.gateway.v1beta1.ListRecycleRequest.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.cs3.gateway.v1beta1.ListRecycleRequest} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getOpaque();
-  if (f != null) {
-    writer.writeMessage(
-      1,
-      f,
-      cs3_types_v1beta1_types_pb.Opaque.serializeBinaryToWriter
-    );
-  }
-  f = message.getRef();
-  if (f != null) {
-    writer.writeMessage(
-      2,
-      f,
-      cs3_storage_provider_v1beta1_resources_pb.Reference.serializeBinaryToWriter
-    );
-  }
-  f = message.getFromTs();
-  if (f != null) {
-    writer.writeMessage(
-      3,
-      f,
-      cs3_types_v1beta1_types_pb.Timestamp.serializeBinaryToWriter
-    );
-  }
-  f = message.getToTs();
-  if (f != null) {
-    writer.writeMessage(
-      4,
-      f,
-      cs3_types_v1beta1_types_pb.Timestamp.serializeBinaryToWriter
-    );
-  }
-};
-
-
-/**
- * optional cs3.types.v1beta1.Opaque opaque = 1;
- * @return {?proto.cs3.types.v1beta1.Opaque}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.getOpaque = function() {
-  return /** @type{?proto.cs3.types.v1beta1.Opaque} */ (
-    jspb.Message.getWrapperField(this, cs3_types_v1beta1_types_pb.Opaque, 1));
-};
-
-
-/**
- * @param {?proto.cs3.types.v1beta1.Opaque|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.setOpaque = function(value) {
-  return jspb.Message.setWrapperField(this, 1, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest} returns this
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.clearOpaque = function() {
-  return this.setOpaque(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.hasOpaque = function() {
-  return jspb.Message.getField(this, 1) != null;
-};
-
-
-/**
- * optional cs3.storage.provider.v1beta1.Reference ref = 2;
- * @return {?proto.cs3.storage.provider.v1beta1.Reference}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.getRef = function() {
-  return /** @type{?proto.cs3.storage.provider.v1beta1.Reference} */ (
-    jspb.Message.getWrapperField(this, cs3_storage_provider_v1beta1_resources_pb.Reference, 2));
-};
-
-
-/**
- * @param {?proto.cs3.storage.provider.v1beta1.Reference|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.setRef = function(value) {
-  return jspb.Message.setWrapperField(this, 2, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest} returns this
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.clearRef = function() {
-  return this.setRef(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.hasRef = function() {
-  return jspb.Message.getField(this, 2) != null;
-};
-
-
-/**
- * optional cs3.types.v1beta1.Timestamp from_ts = 3;
- * @return {?proto.cs3.types.v1beta1.Timestamp}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.getFromTs = function() {
-  return /** @type{?proto.cs3.types.v1beta1.Timestamp} */ (
-    jspb.Message.getWrapperField(this, cs3_types_v1beta1_types_pb.Timestamp, 3));
-};
-
-
-/**
- * @param {?proto.cs3.types.v1beta1.Timestamp|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.setFromTs = function(value) {
-  return jspb.Message.setWrapperField(this, 3, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest} returns this
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.clearFromTs = function() {
-  return this.setFromTs(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.hasFromTs = function() {
-  return jspb.Message.getField(this, 3) != null;
-};
-
-
-/**
- * optional cs3.types.v1beta1.Timestamp to_ts = 4;
- * @return {?proto.cs3.types.v1beta1.Timestamp}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.getToTs = function() {
-  return /** @type{?proto.cs3.types.v1beta1.Timestamp} */ (
-    jspb.Message.getWrapperField(this, cs3_types_v1beta1_types_pb.Timestamp, 4));
-};
-
-
-/**
- * @param {?proto.cs3.types.v1beta1.Timestamp|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.setToTs = function(value) {
-  return jspb.Message.setWrapperField(this, 4, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleRequest} returns this
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.clearToTs = function() {
-  return this.setToTs(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.ListRecycleRequest.prototype.hasToTs = function() {
-  return jspb.Message.getField(this, 4) != null;
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.toObject = function(opt_includeInstance) {
-  return proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
-    ref: (f = msg.getRef()) && cs3_storage_provider_v1beta1_resources_pb.Reference.toObject(includeInstance, f),
-    fromTs: (f = msg.getFromTs()) && cs3_types_v1beta1_types_pb.Timestamp.toObject(includeInstance, f),
-    toTs: (f = msg.getToTs()) && cs3_types_v1beta1_types_pb.Timestamp.toObject(includeInstance, f)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.cs3.gateway.v1beta1.ListRecycleStreamRequest;
-  return proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = new cs3_types_v1beta1_types_pb.Opaque;
-      reader.readMessage(value,cs3_types_v1beta1_types_pb.Opaque.deserializeBinaryFromReader);
-      msg.setOpaque(value);
-      break;
-    case 2:
-      var value = new cs3_storage_provider_v1beta1_resources_pb.Reference;
-      reader.readMessage(value,cs3_storage_provider_v1beta1_resources_pb.Reference.deserializeBinaryFromReader);
-      msg.setRef(value);
-      break;
-    case 3:
-      var value = new cs3_types_v1beta1_types_pb.Timestamp;
-      reader.readMessage(value,cs3_types_v1beta1_types_pb.Timestamp.deserializeBinaryFromReader);
-      msg.setFromTs(value);
-      break;
-    case 4:
-      var value = new cs3_types_v1beta1_types_pb.Timestamp;
-      reader.readMessage(value,cs3_types_v1beta1_types_pb.Timestamp.deserializeBinaryFromReader);
-      msg.setToTs(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getOpaque();
-  if (f != null) {
-    writer.writeMessage(
-      1,
-      f,
-      cs3_types_v1beta1_types_pb.Opaque.serializeBinaryToWriter
-    );
-  }
-  f = message.getRef();
-  if (f != null) {
-    writer.writeMessage(
-      2,
-      f,
-      cs3_storage_provider_v1beta1_resources_pb.Reference.serializeBinaryToWriter
-    );
-  }
-  f = message.getFromTs();
-  if (f != null) {
-    writer.writeMessage(
-      3,
-      f,
-      cs3_types_v1beta1_types_pb.Timestamp.serializeBinaryToWriter
-    );
-  }
-  f = message.getToTs();
-  if (f != null) {
-    writer.writeMessage(
-      4,
-      f,
-      cs3_types_v1beta1_types_pb.Timestamp.serializeBinaryToWriter
-    );
-  }
-};
-
-
-/**
- * optional cs3.types.v1beta1.Opaque opaque = 1;
- * @return {?proto.cs3.types.v1beta1.Opaque}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.getOpaque = function() {
-  return /** @type{?proto.cs3.types.v1beta1.Opaque} */ (
-    jspb.Message.getWrapperField(this, cs3_types_v1beta1_types_pb.Opaque, 1));
-};
-
-
-/**
- * @param {?proto.cs3.types.v1beta1.Opaque|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.setOpaque = function(value) {
-  return jspb.Message.setWrapperField(this, 1, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} returns this
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.clearOpaque = function() {
-  return this.setOpaque(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.hasOpaque = function() {
-  return jspb.Message.getField(this, 1) != null;
-};
-
-
-/**
- * optional cs3.storage.provider.v1beta1.Reference ref = 2;
- * @return {?proto.cs3.storage.provider.v1beta1.Reference}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.getRef = function() {
-  return /** @type{?proto.cs3.storage.provider.v1beta1.Reference} */ (
-    jspb.Message.getWrapperField(this, cs3_storage_provider_v1beta1_resources_pb.Reference, 2));
-};
-
-
-/**
- * @param {?proto.cs3.storage.provider.v1beta1.Reference|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.setRef = function(value) {
-  return jspb.Message.setWrapperField(this, 2, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} returns this
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.clearRef = function() {
-  return this.setRef(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.hasRef = function() {
-  return jspb.Message.getField(this, 2) != null;
-};
-
-
-/**
- * optional cs3.types.v1beta1.Timestamp from_ts = 3;
- * @return {?proto.cs3.types.v1beta1.Timestamp}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.getFromTs = function() {
-  return /** @type{?proto.cs3.types.v1beta1.Timestamp} */ (
-    jspb.Message.getWrapperField(this, cs3_types_v1beta1_types_pb.Timestamp, 3));
-};
-
-
-/**
- * @param {?proto.cs3.types.v1beta1.Timestamp|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.setFromTs = function(value) {
-  return jspb.Message.setWrapperField(this, 3, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} returns this
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.clearFromTs = function() {
-  return this.setFromTs(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.hasFromTs = function() {
-  return jspb.Message.getField(this, 3) != null;
-};
-
-
-/**
- * optional cs3.types.v1beta1.Timestamp to_ts = 4;
- * @return {?proto.cs3.types.v1beta1.Timestamp}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.getToTs = function() {
-  return /** @type{?proto.cs3.types.v1beta1.Timestamp} */ (
-    jspb.Message.getWrapperField(this, cs3_types_v1beta1_types_pb.Timestamp, 4));
-};
-
-
-/**
- * @param {?proto.cs3.types.v1beta1.Timestamp|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.setToTs = function(value) {
-  return jspb.Message.setWrapperField(this, 4, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.ListRecycleStreamRequest} returns this
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.clearToTs = function() {
-  return this.setToTs(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.ListRecycleStreamRequest.prototype.hasToTs = function() {
-  return jspb.Message.getField(this, 4) != null;
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.toObject = function(opt_includeInstance) {
-  return proto.cs3.gateway.v1beta1.PurgeRecycleRequest.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.cs3.gateway.v1beta1.PurgeRecycleRequest} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
-    ref: (f = msg.getRef()) && cs3_storage_provider_v1beta1_resources_pb.Reference.toObject(includeInstance, f)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.cs3.gateway.v1beta1.PurgeRecycleRequest}
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.cs3.gateway.v1beta1.PurgeRecycleRequest;
-  return proto.cs3.gateway.v1beta1.PurgeRecycleRequest.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.cs3.gateway.v1beta1.PurgeRecycleRequest} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.cs3.gateway.v1beta1.PurgeRecycleRequest}
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = new cs3_types_v1beta1_types_pb.Opaque;
-      reader.readMessage(value,cs3_types_v1beta1_types_pb.Opaque.deserializeBinaryFromReader);
-      msg.setOpaque(value);
-      break;
-    case 2:
-      var value = new cs3_storage_provider_v1beta1_resources_pb.Reference;
-      reader.readMessage(value,cs3_storage_provider_v1beta1_resources_pb.Reference.deserializeBinaryFromReader);
-      msg.setRef(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.cs3.gateway.v1beta1.PurgeRecycleRequest.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.cs3.gateway.v1beta1.PurgeRecycleRequest} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getOpaque();
-  if (f != null) {
-    writer.writeMessage(
-      1,
-      f,
-      cs3_types_v1beta1_types_pb.Opaque.serializeBinaryToWriter
-    );
-  }
-  f = message.getRef();
-  if (f != null) {
-    writer.writeMessage(
-      2,
-      f,
-      cs3_storage_provider_v1beta1_resources_pb.Reference.serializeBinaryToWriter
-    );
-  }
-};
-
-
-/**
- * optional cs3.types.v1beta1.Opaque opaque = 1;
- * @return {?proto.cs3.types.v1beta1.Opaque}
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.getOpaque = function() {
-  return /** @type{?proto.cs3.types.v1beta1.Opaque} */ (
-    jspb.Message.getWrapperField(this, cs3_types_v1beta1_types_pb.Opaque, 1));
-};
-
-
-/**
- * @param {?proto.cs3.types.v1beta1.Opaque|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.PurgeRecycleRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.setOpaque = function(value) {
-  return jspb.Message.setWrapperField(this, 1, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.PurgeRecycleRequest} returns this
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.clearOpaque = function() {
-  return this.setOpaque(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.hasOpaque = function() {
-  return jspb.Message.getField(this, 1) != null;
-};
-
-
-/**
- * optional cs3.storage.provider.v1beta1.Reference ref = 2;
- * @return {?proto.cs3.storage.provider.v1beta1.Reference}
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.getRef = function() {
-  return /** @type{?proto.cs3.storage.provider.v1beta1.Reference} */ (
-    jspb.Message.getWrapperField(this, cs3_storage_provider_v1beta1_resources_pb.Reference, 2));
-};
-
-
-/**
- * @param {?proto.cs3.storage.provider.v1beta1.Reference|undefined} value
- * @return {!proto.cs3.gateway.v1beta1.PurgeRecycleRequest} returns this
-*/
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.setRef = function(value) {
-  return jspb.Message.setWrapperField(this, 2, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.cs3.gateway.v1beta1.PurgeRecycleRequest} returns this
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.clearRef = function() {
-  return this.setRef(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.cs3.gateway.v1beta1.PurgeRecycleRequest.prototype.hasRef = function() {
-  return jspb.Message.getField(this, 2) != null;
-};
-
-
-
 /**
  * List of repeated fields within this message type.
  * @private {!Array<number>}
diff --git a/cs3/identity/group/v1beta1/group_api_pb.d.ts b/cs3/identity/group/v1beta1/group_api_pb.d.ts
index d1e9df6..16de873 100644
--- a/cs3/identity/group/v1beta1/group_api_pb.d.ts
+++ b/cs3/identity/group/v1beta1/group_api_pb.d.ts
@@ -18,6 +18,9 @@ export class GetGroupRequest extends jspb.Message {
   getGroupId(): cs3_identity_group_v1beta1_resources_pb.GroupId | undefined;
   setGroupId(value?: cs3_identity_group_v1beta1_resources_pb.GroupId): void;
 
+  getSkipFetchingMembers(): boolean;
+  setSkipFetchingMembers(value: boolean): void;
+
   serializeBinary(): Uint8Array;
   toObject(includeInstance?: boolean): GetGroupRequest.AsObject;
   static toObject(includeInstance: boolean, msg: GetGroupRequest): GetGroupRequest.AsObject;
@@ -32,6 +35,7 @@ export namespace GetGroupRequest {
   export type AsObject = {
     opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
     groupId?: cs3_identity_group_v1beta1_resources_pb.GroupId.AsObject,
+    skipFetchingMembers: boolean,
   }
 }
 
@@ -81,6 +85,9 @@ export class GetGroupByClaimRequest extends jspb.Message {
   getValue(): string;
   setValue(value: string): void;
 
+  getSkipFetchingMembers(): boolean;
+  setSkipFetchingMembers(value: boolean): void;
+
   serializeBinary(): Uint8Array;
   toObject(includeInstance?: boolean): GetGroupByClaimRequest.AsObject;
   static toObject(includeInstance: boolean, msg: GetGroupByClaimRequest): GetGroupByClaimRequest.AsObject;
@@ -96,6 +103,7 @@ export namespace GetGroupByClaimRequest {
     opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
     claim: string,
     value: string,
+    skipFetchingMembers: boolean,
   }
 }
 
@@ -270,6 +278,9 @@ export class FindGroupsRequest extends jspb.Message {
   getFilter(): string;
   setFilter(value: string): void;
 
+  getSkipFetchingMembers(): boolean;
+  setSkipFetchingMembers(value: boolean): void;
+
   serializeBinary(): Uint8Array;
   toObject(includeInstance?: boolean): FindGroupsRequest.AsObject;
   static toObject(includeInstance: boolean, msg: FindGroupsRequest): FindGroupsRequest.AsObject;
@@ -284,6 +295,7 @@ export namespace FindGroupsRequest {
   export type AsObject = {
     opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
     filter: string,
+    skipFetchingMembers: boolean,
   }
 }
 
diff --git a/cs3/identity/group/v1beta1/group_api_pb.js b/cs3/identity/group/v1beta1/group_api_pb.js
index e2546c6..188b1b6 100644
--- a/cs3/identity/group/v1beta1/group_api_pb.js
+++ b/cs3/identity/group/v1beta1/group_api_pb.js
@@ -276,7 +276,8 @@ proto.cs3.identity.group.v1beta1.GetGroupRequest.prototype.toObject = function(o
 proto.cs3.identity.group.v1beta1.GetGroupRequest.toObject = function(includeInstance, msg) {
   var f, obj = {
     opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
-    groupId: (f = msg.getGroupId()) && cs3_identity_group_v1beta1_resources_pb.GroupId.toObject(includeInstance, f)
+    groupId: (f = msg.getGroupId()) && cs3_identity_group_v1beta1_resources_pb.GroupId.toObject(includeInstance, f),
+    skipFetchingMembers: jspb.Message.getBooleanFieldWithDefault(msg, 3, false)
   };
 
   if (includeInstance) {
@@ -323,6 +324,10 @@ proto.cs3.identity.group.v1beta1.GetGroupRequest.deserializeBinaryFromReader = f
       reader.readMessage(value,cs3_identity_group_v1beta1_resources_pb.GroupId.deserializeBinaryFromReader);
       msg.setGroupId(value);
       break;
+    case 3:
+      var value = /** @type {boolean} */ (reader.readBool());
+      msg.setSkipFetchingMembers(value);
+      break;
     default:
       reader.skipField();
       break;
@@ -368,6 +373,13 @@ proto.cs3.identity.group.v1beta1.GetGroupRequest.serializeBinaryToWriter = funct
       cs3_identity_group_v1beta1_resources_pb.GroupId.serializeBinaryToWriter
     );
   }
+  f = message.getSkipFetchingMembers();
+  if (f) {
+    writer.writeBool(
+      3,
+      f
+    );
+  }
 };
 
 
@@ -445,6 +457,24 @@ proto.cs3.identity.group.v1beta1.GetGroupRequest.prototype.hasGroupId = function
 };
 
 
+/**
+ * optional bool skip_fetching_members = 3;
+ * @return {boolean}
+ */
+proto.cs3.identity.group.v1beta1.GetGroupRequest.prototype.getSkipFetchingMembers = function() {
+  return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false));
+};
+
+
+/**
+ * @param {boolean} value
+ * @return {!proto.cs3.identity.group.v1beta1.GetGroupRequest} returns this
+ */
+proto.cs3.identity.group.v1beta1.GetGroupRequest.prototype.setSkipFetchingMembers = function(value) {
+  return jspb.Message.setProto3BooleanField(this, 3, value);
+};
+
+
 
 
 
@@ -732,7 +762,8 @@ proto.cs3.identity.group.v1beta1.GetGroupByClaimRequest.toObject = function(incl
   var f, obj = {
     opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
     claim: jspb.Message.getFieldWithDefault(msg, 2, ""),
-    value: jspb.Message.getFieldWithDefault(msg, 3, "")
+    value: jspb.Message.getFieldWithDefault(msg, 3, ""),
+    skipFetchingMembers: jspb.Message.getBooleanFieldWithDefault(msg, 4, false)
   };
 
   if (includeInstance) {
@@ -782,6 +813,10 @@ proto.cs3.identity.group.v1beta1.GetGroupByClaimRequest.deserializeBinaryFromRea
       var value = /** @type {string} */ (reader.readString());
       msg.setValue(value);
       break;
+    case 4:
+      var value = /** @type {boolean} */ (reader.readBool());
+      msg.setSkipFetchingMembers(value);
+      break;
     default:
       reader.skipField();
       break;
@@ -833,6 +868,13 @@ proto.cs3.identity.group.v1beta1.GetGroupByClaimRequest.serializeBinaryToWriter
       f
     );
   }
+  f = message.getSkipFetchingMembers();
+  if (f) {
+    writer.writeBool(
+      4,
+      f
+    );
+  }
 };
 
 
@@ -909,6 +951,24 @@ proto.cs3.identity.group.v1beta1.GetGroupByClaimRequest.prototype.setValue = fun
 };
 
 
+/**
+ * optional bool skip_fetching_members = 4;
+ * @return {boolean}
+ */
+proto.cs3.identity.group.v1beta1.GetGroupByClaimRequest.prototype.getSkipFetchingMembers = function() {
+  return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
+};
+
+
+/**
+ * @param {boolean} value
+ * @return {!proto.cs3.identity.group.v1beta1.GetGroupByClaimRequest} returns this
+ */
+proto.cs3.identity.group.v1beta1.GetGroupByClaimRequest.prototype.setSkipFetchingMembers = function(value) {
+  return jspb.Message.setProto3BooleanField(this, 4, value);
+};
+
+
 
 
 
@@ -2144,7 +2204,8 @@ proto.cs3.identity.group.v1beta1.FindGroupsRequest.prototype.toObject = function
 proto.cs3.identity.group.v1beta1.FindGroupsRequest.toObject = function(includeInstance, msg) {
   var f, obj = {
     opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
-    filter: jspb.Message.getFieldWithDefault(msg, 2, "")
+    filter: jspb.Message.getFieldWithDefault(msg, 2, ""),
+    skipFetchingMembers: jspb.Message.getBooleanFieldWithDefault(msg, 3, false)
   };
 
   if (includeInstance) {
@@ -2190,6 +2251,10 @@ proto.cs3.identity.group.v1beta1.FindGroupsRequest.deserializeBinaryFromReader =
       var value = /** @type {string} */ (reader.readString());
       msg.setFilter(value);
       break;
+    case 3:
+      var value = /** @type {boolean} */ (reader.readBool());
+      msg.setSkipFetchingMembers(value);
+      break;
     default:
       reader.skipField();
       break;
@@ -2234,6 +2299,13 @@ proto.cs3.identity.group.v1beta1.FindGroupsRequest.serializeBinaryToWriter = fun
       f
     );
   }
+  f = message.getSkipFetchingMembers();
+  if (f) {
+    writer.writeBool(
+      3,
+      f
+    );
+  }
 };
 
 
@@ -2292,6 +2364,24 @@ proto.cs3.identity.group.v1beta1.FindGroupsRequest.prototype.setFilter = functio
 };
 
 
+/**
+ * optional bool skip_fetching_members = 3;
+ * @return {boolean}
+ */
+proto.cs3.identity.group.v1beta1.FindGroupsRequest.prototype.getSkipFetchingMembers = function() {
+  return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false));
+};
+
+
+/**
+ * @param {boolean} value
+ * @return {!proto.cs3.identity.group.v1beta1.FindGroupsRequest} returns this
+ */
+proto.cs3.identity.group.v1beta1.FindGroupsRequest.prototype.setSkipFetchingMembers = function(value) {
+  return jspb.Message.setProto3BooleanField(this, 3, value);
+};
+
+
 
 /**
  * List of repeated fields within this message type.
diff --git a/cs3/identity/user/v1beta1/user_api_pb.d.ts b/cs3/identity/user/v1beta1/user_api_pb.d.ts
index dafd00d..4a12c72 100644
--- a/cs3/identity/user/v1beta1/user_api_pb.d.ts
+++ b/cs3/identity/user/v1beta1/user_api_pb.d.ts
@@ -17,6 +17,9 @@ export class GetUserRequest extends jspb.Message {
   getUserId(): cs3_identity_user_v1beta1_resources_pb.UserId | undefined;
   setUserId(value?: cs3_identity_user_v1beta1_resources_pb.UserId): void;
 
+  getSkipFetchingUserGroups(): boolean;
+  setSkipFetchingUserGroups(value: boolean): void;
+
   serializeBinary(): Uint8Array;
   toObject(includeInstance?: boolean): GetUserRequest.AsObject;
   static toObject(includeInstance: boolean, msg: GetUserRequest): GetUserRequest.AsObject;
@@ -31,6 +34,7 @@ export namespace GetUserRequest {
   export type AsObject = {
     opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
     userId?: cs3_identity_user_v1beta1_resources_pb.UserId.AsObject,
+    skipFetchingUserGroups: boolean,
   }
 }
 
@@ -80,6 +84,9 @@ export class GetUserByClaimRequest extends jspb.Message {
   getValue(): string;
   setValue(value: string): void;
 
+  getSkipFetchingUserGroups(): boolean;
+  setSkipFetchingUserGroups(value: boolean): void;
+
   serializeBinary(): Uint8Array;
   toObject(includeInstance?: boolean): GetUserByClaimRequest.AsObject;
   static toObject(includeInstance: boolean, msg: GetUserByClaimRequest): GetUserByClaimRequest.AsObject;
@@ -95,6 +102,7 @@ export namespace GetUserByClaimRequest {
     opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
     claim: string,
     value: string,
+    skipFetchingUserGroups: boolean,
   }
 }
 
@@ -203,6 +211,9 @@ export class FindUsersRequest extends jspb.Message {
   getFilter(): string;
   setFilter(value: string): void;
 
+  getSkipFetchingUserGroups(): boolean;
+  setSkipFetchingUserGroups(value: boolean): void;
+
   serializeBinary(): Uint8Array;
   toObject(includeInstance?: boolean): FindUsersRequest.AsObject;
   static toObject(includeInstance: boolean, msg: FindUsersRequest): FindUsersRequest.AsObject;
@@ -217,6 +228,7 @@ export namespace FindUsersRequest {
   export type AsObject = {
     opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
     filter: string,
+    skipFetchingUserGroups: boolean,
   }
 }
 
diff --git a/cs3/identity/user/v1beta1/user_api_pb.js b/cs3/identity/user/v1beta1/user_api_pb.js
index 8bb4a06..d5099f1 100644
--- a/cs3/identity/user/v1beta1/user_api_pb.js
+++ b/cs3/identity/user/v1beta1/user_api_pb.js
@@ -230,7 +230,8 @@ proto.cs3.identity.user.v1beta1.GetUserRequest.prototype.toObject = function(opt
 proto.cs3.identity.user.v1beta1.GetUserRequest.toObject = function(includeInstance, msg) {
   var f, obj = {
     opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
-    userId: (f = msg.getUserId()) && cs3_identity_user_v1beta1_resources_pb.UserId.toObject(includeInstance, f)
+    userId: (f = msg.getUserId()) && cs3_identity_user_v1beta1_resources_pb.UserId.toObject(includeInstance, f),
+    skipFetchingUserGroups: jspb.Message.getBooleanFieldWithDefault(msg, 3, false)
   };
 
   if (includeInstance) {
@@ -277,6 +278,10 @@ proto.cs3.identity.user.v1beta1.GetUserRequest.deserializeBinaryFromReader = fun
       reader.readMessage(value,cs3_identity_user_v1beta1_resources_pb.UserId.deserializeBinaryFromReader);
       msg.setUserId(value);
       break;
+    case 3:
+      var value = /** @type {boolean} */ (reader.readBool());
+      msg.setSkipFetchingUserGroups(value);
+      break;
     default:
       reader.skipField();
       break;
@@ -322,6 +327,13 @@ proto.cs3.identity.user.v1beta1.GetUserRequest.serializeBinaryToWriter = functio
       cs3_identity_user_v1beta1_resources_pb.UserId.serializeBinaryToWriter
     );
   }
+  f = message.getSkipFetchingUserGroups();
+  if (f) {
+    writer.writeBool(
+      3,
+      f
+    );
+  }
 };
 
 
@@ -399,6 +411,24 @@ proto.cs3.identity.user.v1beta1.GetUserRequest.prototype.hasUserId = function()
 };
 
 
+/**
+ * optional bool skip_fetching_user_groups = 3;
+ * @return {boolean}
+ */
+proto.cs3.identity.user.v1beta1.GetUserRequest.prototype.getSkipFetchingUserGroups = function() {
+  return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false));
+};
+
+
+/**
+ * @param {boolean} value
+ * @return {!proto.cs3.identity.user.v1beta1.GetUserRequest} returns this
+ */
+proto.cs3.identity.user.v1beta1.GetUserRequest.prototype.setSkipFetchingUserGroups = function(value) {
+  return jspb.Message.setProto3BooleanField(this, 3, value);
+};
+
+
 
 
 
@@ -686,7 +716,8 @@ proto.cs3.identity.user.v1beta1.GetUserByClaimRequest.toObject = function(includ
   var f, obj = {
     opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
     claim: jspb.Message.getFieldWithDefault(msg, 2, ""),
-    value: jspb.Message.getFieldWithDefault(msg, 3, "")
+    value: jspb.Message.getFieldWithDefault(msg, 3, ""),
+    skipFetchingUserGroups: jspb.Message.getBooleanFieldWithDefault(msg, 4, false)
   };
 
   if (includeInstance) {
@@ -736,6 +767,10 @@ proto.cs3.identity.user.v1beta1.GetUserByClaimRequest.deserializeBinaryFromReade
       var value = /** @type {string} */ (reader.readString());
       msg.setValue(value);
       break;
+    case 4:
+      var value = /** @type {boolean} */ (reader.readBool());
+      msg.setSkipFetchingUserGroups(value);
+      break;
     default:
       reader.skipField();
       break;
@@ -787,6 +822,13 @@ proto.cs3.identity.user.v1beta1.GetUserByClaimRequest.serializeBinaryToWriter =
       f
     );
   }
+  f = message.getSkipFetchingUserGroups();
+  if (f) {
+    writer.writeBool(
+      4,
+      f
+    );
+  }
 };
 
 
@@ -863,6 +905,24 @@ proto.cs3.identity.user.v1beta1.GetUserByClaimRequest.prototype.setValue = funct
 };
 
 
+/**
+ * optional bool skip_fetching_user_groups = 4;
+ * @return {boolean}
+ */
+proto.cs3.identity.user.v1beta1.GetUserByClaimRequest.prototype.getSkipFetchingUserGroups = function() {
+  return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
+};
+
+
+/**
+ * @param {boolean} value
+ * @return {!proto.cs3.identity.user.v1beta1.GetUserByClaimRequest} returns this
+ */
+proto.cs3.identity.user.v1beta1.GetUserByClaimRequest.prototype.setSkipFetchingUserGroups = function(value) {
+  return jspb.Message.setProto3BooleanField(this, 4, value);
+};
+
+
 
 
 
@@ -1609,7 +1669,8 @@ proto.cs3.identity.user.v1beta1.FindUsersRequest.prototype.toObject = function(o
 proto.cs3.identity.user.v1beta1.FindUsersRequest.toObject = function(includeInstance, msg) {
   var f, obj = {
     opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
-    filter: jspb.Message.getFieldWithDefault(msg, 2, "")
+    filter: jspb.Message.getFieldWithDefault(msg, 2, ""),
+    skipFetchingUserGroups: jspb.Message.getBooleanFieldWithDefault(msg, 3, false)
   };
 
   if (includeInstance) {
@@ -1655,6 +1716,10 @@ proto.cs3.identity.user.v1beta1.FindUsersRequest.deserializeBinaryFromReader = f
       var value = /** @type {string} */ (reader.readString());
       msg.setFilter(value);
       break;
+    case 3:
+      var value = /** @type {boolean} */ (reader.readBool());
+      msg.setSkipFetchingUserGroups(value);
+      break;
     default:
       reader.skipField();
       break;
@@ -1699,6 +1764,13 @@ proto.cs3.identity.user.v1beta1.FindUsersRequest.serializeBinaryToWriter = funct
       f
     );
   }
+  f = message.getSkipFetchingUserGroups();
+  if (f) {
+    writer.writeBool(
+      3,
+      f
+    );
+  }
 };
 
 
@@ -1757,6 +1829,24 @@ proto.cs3.identity.user.v1beta1.FindUsersRequest.prototype.setFilter = function(
 };
 
 
+/**
+ * optional bool skip_fetching_user_groups = 3;
+ * @return {boolean}
+ */
+proto.cs3.identity.user.v1beta1.FindUsersRequest.prototype.getSkipFetchingUserGroups = function() {
+  return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false));
+};
+
+
+/**
+ * @param {boolean} value
+ * @return {!proto.cs3.identity.user.v1beta1.FindUsersRequest} returns this
+ */
+proto.cs3.identity.user.v1beta1.FindUsersRequest.prototype.setSkipFetchingUserGroups = function(value) {
+  return jspb.Message.setProto3BooleanField(this, 3, value);
+};
+
+
 
 /**
  * List of repeated fields within this message type.
diff --git a/cs3/storage/provider/v1beta1/provider_api_pb.d.ts b/cs3/storage/provider/v1beta1/provider_api_pb.d.ts
index 6ff1b9e..96d4d36 100644
--- a/cs3/storage/provider/v1beta1/provider_api_pb.d.ts
+++ b/cs3/storage/provider/v1beta1/provider_api_pb.d.ts
@@ -845,6 +845,9 @@ export class ListRecycleRequest extends jspb.Message {
   getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
   setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
 
+  getKey(): string;
+  setKey(value: string): void;
+
   serializeBinary(): Uint8Array;
   toObject(includeInstance?: boolean): ListRecycleRequest.AsObject;
   static toObject(includeInstance: boolean, msg: ListRecycleRequest): ListRecycleRequest.AsObject;
@@ -861,6 +864,7 @@ export namespace ListRecycleRequest {
     fromTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
     toTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
     ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    key: string,
   }
 }
 
@@ -919,6 +923,9 @@ export class ListRecycleStreamRequest extends jspb.Message {
   getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
   setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
 
+  getKey(): string;
+  setKey(value: string): void;
+
   serializeBinary(): Uint8Array;
   toObject(includeInstance?: boolean): ListRecycleStreamRequest.AsObject;
   static toObject(includeInstance: boolean, msg: ListRecycleStreamRequest): ListRecycleStreamRequest.AsObject;
@@ -935,6 +942,7 @@ export namespace ListRecycleStreamRequest {
     fromTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
     toTs?: cs3_types_v1beta1_types_pb.Timestamp.AsObject,
     ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    key: string,
   }
 }
 
@@ -1045,6 +1053,9 @@ export class PurgeRecycleRequest extends jspb.Message {
   getRef(): cs3_storage_provider_v1beta1_resources_pb.Reference | undefined;
   setRef(value?: cs3_storage_provider_v1beta1_resources_pb.Reference): void;
 
+  getKey(): string;
+  setKey(value: string): void;
+
   serializeBinary(): Uint8Array;
   toObject(includeInstance?: boolean): PurgeRecycleRequest.AsObject;
   static toObject(includeInstance: boolean, msg: PurgeRecycleRequest): PurgeRecycleRequest.AsObject;
@@ -1059,6 +1070,7 @@ export namespace PurgeRecycleRequest {
   export type AsObject = {
     opaque?: cs3_types_v1beta1_types_pb.Opaque.AsObject,
     ref?: cs3_storage_provider_v1beta1_resources_pb.Reference.AsObject,
+    key: string,
   }
 }
 
diff --git a/cs3/storage/provider/v1beta1/provider_api_pb.js b/cs3/storage/provider/v1beta1/provider_api_pb.js
index 82a9602..ea5bd02 100644
--- a/cs3/storage/provider/v1beta1/provider_api_pb.js
+++ b/cs3/storage/provider/v1beta1/provider_api_pb.js
@@ -7455,7 +7455,8 @@ proto.cs3.storage.provider.v1beta1.ListRecycleRequest.toObject = function(includ
     opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
     fromTs: (f = msg.getFromTs()) && cs3_types_v1beta1_types_pb.Timestamp.toObject(includeInstance, f),
     toTs: (f = msg.getToTs()) && cs3_types_v1beta1_types_pb.Timestamp.toObject(includeInstance, f),
-    ref: (f = msg.getRef()) && cs3_storage_provider_v1beta1_resources_pb.Reference.toObject(includeInstance, f)
+    ref: (f = msg.getRef()) && cs3_storage_provider_v1beta1_resources_pb.Reference.toObject(includeInstance, f),
+    key: jspb.Message.getFieldWithDefault(msg, 5, "")
   };
 
   if (includeInstance) {
@@ -7512,6 +7513,10 @@ proto.cs3.storage.provider.v1beta1.ListRecycleRequest.deserializeBinaryFromReade
       reader.readMessage(value,cs3_storage_provider_v1beta1_resources_pb.Reference.deserializeBinaryFromReader);
       msg.setRef(value);
       break;
+    case 5:
+      var value = /** @type {string} */ (reader.readString());
+      msg.setKey(value);
+      break;
     default:
       reader.skipField();
       break;
@@ -7573,6 +7578,13 @@ proto.cs3.storage.provider.v1beta1.ListRecycleRequest.serializeBinaryToWriter =
       cs3_storage_provider_v1beta1_resources_pb.Reference.serializeBinaryToWriter
     );
   }
+  f = message.getKey();
+  if (f.length > 0) {
+    writer.writeString(
+      5,
+      f
+    );
+  }
 };
 
 
@@ -7724,6 +7736,24 @@ proto.cs3.storage.provider.v1beta1.ListRecycleRequest.prototype.hasRef = functio
 };
 
 
+/**
+ * optional string key = 5;
+ * @return {string}
+ */
+proto.cs3.storage.provider.v1beta1.ListRecycleRequest.prototype.getKey = function() {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.cs3.storage.provider.v1beta1.ListRecycleRequest} returns this
+ */
+proto.cs3.storage.provider.v1beta1.ListRecycleRequest.prototype.setKey = function(value) {
+  return jspb.Message.setProto3StringField(this, 5, value);
+};
+
+
 
 /**
  * List of repeated fields within this message type.
@@ -8021,7 +8051,8 @@ proto.cs3.storage.provider.v1beta1.ListRecycleStreamRequest.toObject = function(
     opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
     fromTs: (f = msg.getFromTs()) && cs3_types_v1beta1_types_pb.Timestamp.toObject(includeInstance, f),
     toTs: (f = msg.getToTs()) && cs3_types_v1beta1_types_pb.Timestamp.toObject(includeInstance, f),
-    ref: (f = msg.getRef()) && cs3_storage_provider_v1beta1_resources_pb.Reference.toObject(includeInstance, f)
+    ref: (f = msg.getRef()) && cs3_storage_provider_v1beta1_resources_pb.Reference.toObject(includeInstance, f),
+    key: jspb.Message.getFieldWithDefault(msg, 5, "")
   };
 
   if (includeInstance) {
@@ -8078,6 +8109,10 @@ proto.cs3.storage.provider.v1beta1.ListRecycleStreamRequest.deserializeBinaryFro
       reader.readMessage(value,cs3_storage_provider_v1beta1_resources_pb.Reference.deserializeBinaryFromReader);
       msg.setRef(value);
       break;
+    case 5:
+      var value = /** @type {string} */ (reader.readString());
+      msg.setKey(value);
+      break;
     default:
       reader.skipField();
       break;
@@ -8139,6 +8174,13 @@ proto.cs3.storage.provider.v1beta1.ListRecycleStreamRequest.serializeBinaryToWri
       cs3_storage_provider_v1beta1_resources_pb.Reference.serializeBinaryToWriter
     );
   }
+  f = message.getKey();
+  if (f.length > 0) {
+    writer.writeString(
+      5,
+      f
+    );
+  }
 };
 
 
@@ -8290,6 +8332,24 @@ proto.cs3.storage.provider.v1beta1.ListRecycleStreamRequest.prototype.hasRef = f
 };
 
 
+/**
+ * optional string key = 5;
+ * @return {string}
+ */
+proto.cs3.storage.provider.v1beta1.ListRecycleStreamRequest.prototype.getKey = function() {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.cs3.storage.provider.v1beta1.ListRecycleStreamRequest} returns this
+ */
+proto.cs3.storage.provider.v1beta1.ListRecycleStreamRequest.prototype.setKey = function(value) {
+  return jspb.Message.setProto3StringField(this, 5, value);
+};
+
+
 
 
 
@@ -9031,7 +9091,8 @@ proto.cs3.storage.provider.v1beta1.PurgeRecycleRequest.prototype.toObject = func
 proto.cs3.storage.provider.v1beta1.PurgeRecycleRequest.toObject = function(includeInstance, msg) {
   var f, obj = {
     opaque: (f = msg.getOpaque()) && cs3_types_v1beta1_types_pb.Opaque.toObject(includeInstance, f),
-    ref: (f = msg.getRef()) && cs3_storage_provider_v1beta1_resources_pb.Reference.toObject(includeInstance, f)
+    ref: (f = msg.getRef()) && cs3_storage_provider_v1beta1_resources_pb.Reference.toObject(includeInstance, f),
+    key: jspb.Message.getFieldWithDefault(msg, 3, "")
   };
 
   if (includeInstance) {
@@ -9078,6 +9139,10 @@ proto.cs3.storage.provider.v1beta1.PurgeRecycleRequest.deserializeBinaryFromRead
       reader.readMessage(value,cs3_storage_provider_v1beta1_resources_pb.Reference.deserializeBinaryFromReader);
       msg.setRef(value);
       break;
+    case 3:
+      var value = /** @type {string} */ (reader.readString());
+      msg.setKey(value);
+      break;
     default:
       reader.skipField();
       break;
@@ -9123,6 +9188,13 @@ proto.cs3.storage.provider.v1beta1.PurgeRecycleRequest.serializeBinaryToWriter =
       cs3_storage_provider_v1beta1_resources_pb.Reference.serializeBinaryToWriter
     );
   }
+  f = message.getKey();
+  if (f.length > 0) {
+    writer.writeString(
+      3,
+      f
+    );
+  }
 };
 
 
@@ -9200,6 +9272,24 @@ proto.cs3.storage.provider.v1beta1.PurgeRecycleRequest.prototype.hasRef = functi
 };
 
 
+/**
+ * optional string key = 3;
+ * @return {string}
+ */
+proto.cs3.storage.provider.v1beta1.PurgeRecycleRequest.prototype.getKey = function() {
+  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.cs3.storage.provider.v1beta1.PurgeRecycleRequest} returns this
+ */
+proto.cs3.storage.provider.v1beta1.PurgeRecycleRequest.prototype.setKey = function(value) {
+  return jspb.Message.setProto3StringField(this, 3, value);
+};
+
+