/// import * as grpc from 'grpc'; export interface ICallable { exec(service: keyof typeof Services, method: string, params: object, options?: grpc.CallOptions): Promise; getConnection(service: keyof typeof Services): Promise<{ resource: T; client: grpc.Client; metadata: grpc.Metadata; }>; markFailed(resource: T): void; } export interface IResponseStream { on(event: 'data', fn: (item: T) => void): this; on(event: 'end', fn: () => void): this; on(event: 'status', fn: (status: grpc.StatusMessage) => void): this; on(event: 'error', fn: (err: Error) => void): this; } export interface IRequestStream { write(item: T): void; end(): void; cancel(): void; } export interface IDuplexStream extends IRequestStream, IResponseStream { } export declare class KVClient { private client; constructor(client: ICallable); /** * Range gets the keys in the range from the key-value store. */ range(req: IRangeRequest, options?: grpc.CallOptions): Promise; /** * Put puts the given key into the key-value store. * A put request increments the revision of the key-value store * and generates one event in the event history. */ put(req: IPutRequest, options?: grpc.CallOptions): Promise; /** * DeleteRange deletes the given range from the key-value store. * A delete request increments the revision of the key-value store * and generates a delete event in the event history for every deleted key. */ deleteRange(req: IDeleteRangeRequest, options?: grpc.CallOptions): Promise; /** * Txn processes multiple requests in a single transaction. * A txn request increments the revision of the key-value store * and generates events with the same revision for every completed request. * It is not allowed to modify the same key several times within one txn. */ txn(req: ITxnRequest, options?: grpc.CallOptions): Promise; /** * Compact compacts the event history in the etcd key-value store. The key-value * store should be periodically compacted or the event history will continue to grow * indefinitely. */ compact(req: ICompactionRequest, options?: grpc.CallOptions): Promise; } export declare class WatchClient { private client; constructor(client: ICallable); /** * Watch watches for events happening or that have happened. Both input and output * are streams; the input stream is for creating and canceling watchers and the output * stream sends events. One watch RPC can watch on multiple key ranges, streaming events * for several watches at once. The entire event history can be watched starting from the * last compaction revision. */ watch(options?: grpc.CallOptions): Promise>; } export declare class LeaseClient { private client; constructor(client: ICallable); /** * LeaseGrant creates a lease which expires if the server does not receive a keepAlive * within a given time to live period. All keys attached to the lease will be expired and * deleted if the lease expires. Each expired key generates a delete event in the event history. */ leaseGrant(req: ILeaseGrantRequest, options?: grpc.CallOptions): Promise; /** * LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted. */ leaseRevoke(req: ILeaseRevokeRequest, options?: grpc.CallOptions): Promise; /** * LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client * to the server and streaming keep alive responses from the server to the client. */ leaseKeepAlive(options?: grpc.CallOptions): Promise>; /** * LeaseTimeToLive retrieves lease information. */ leaseTimeToLive(req: ILeaseTimeToLiveRequest, options?: grpc.CallOptions): Promise; /** * LeaseLeases lists all existing leases. */ leaseLeases(options?: grpc.CallOptions): Promise; } export declare class ClusterClient { private client; constructor(client: ICallable); /** * MemberAdd adds a member into the cluster. */ memberAdd(req: IMemberAddRequest, options?: grpc.CallOptions): Promise; /** * MemberRemove removes an existing member from the cluster. */ memberRemove(req: IMemberRemoveRequest, options?: grpc.CallOptions): Promise; /** * MemberUpdate updates the member configuration. */ memberUpdate(req: IMemberUpdateRequest, options?: grpc.CallOptions): Promise; /** * MemberList lists all the members in the cluster. */ memberList(options?: grpc.CallOptions): Promise; } export declare class MaintenanceClient { private client; constructor(client: ICallable); /** * Alarm activates, deactivates, and queries alarms regarding cluster health. */ alarm(req: IAlarmRequest, options?: grpc.CallOptions): Promise; /** * Status gets the status of the member. */ status(options?: grpc.CallOptions): Promise; /** * Defragment defragments a member's backend database to recover storage space. */ defragment(options?: grpc.CallOptions): Promise; /** * Hash computes the hash of the KV's backend. * This is designed for testing; do not use this in production when there * are ongoing transactions. */ hash(options?: grpc.CallOptions): Promise; /** * HashKV computes the hash of all MVCC keys up to a given revision. */ hashKV(req: IHashKVRequest, options?: grpc.CallOptions): Promise; /** * Snapshot sends a snapshot of the entire backend from a member over a stream to a client. */ snapshot(options?: grpc.CallOptions): Promise>; /** * MoveLeader requests current leader node to transfer its leadership to transferee. */ moveLeader(req: IMoveLeaderRequest, options?: grpc.CallOptions): Promise; } export declare class AuthClient { private client; constructor(client: ICallable); /** * AuthEnable enables authentication. */ authEnable(options?: grpc.CallOptions): Promise; /** * AuthDisable disables authentication. */ authDisable(options?: grpc.CallOptions): Promise; /** * Authenticate processes an authenticate request. */ authenticate(req: IAuthenticateRequest, options?: grpc.CallOptions): Promise; /** * UserAdd adds a new user. */ userAdd(req: IAuthUserAddRequest, options?: grpc.CallOptions): Promise; /** * UserGet gets detailed user information. */ userGet(req: IAuthUserGetRequest, options?: grpc.CallOptions): Promise; /** * UserList gets a list of all users. */ userList(options?: grpc.CallOptions): Promise; /** * UserDelete deletes a specified user. */ userDelete(req: IAuthUserDeleteRequest, options?: grpc.CallOptions): Promise; /** * UserChangePassword changes the password of a specified user. */ userChangePassword(req: IAuthUserChangePasswordRequest, options?: grpc.CallOptions): Promise; /** * UserGrant grants a role to a specified user. */ userGrantRole(req: IAuthUserGrantRoleRequest, options?: grpc.CallOptions): Promise; /** * UserRevokeRole revokes a role of specified user. */ userRevokeRole(req: IAuthUserRevokeRoleRequest, options?: grpc.CallOptions): Promise; /** * RoleAdd adds a new role. */ roleAdd(req: IAuthRoleAddRequest, options?: grpc.CallOptions): Promise; /** * RoleGet gets detailed role information. */ roleGet(req: IAuthRoleGetRequest, options?: grpc.CallOptions): Promise; /** * RoleList gets lists of all roles. */ roleList(options?: grpc.CallOptions): Promise; /** * RoleDelete deletes a specified role. */ roleDelete(req: IAuthRoleDeleteRequest, options?: grpc.CallOptions): Promise; /** * RoleGrantPermission grants a permission of a specified key or range to a specified role. */ roleGrantPermission(req: IAuthRoleGrantPermissionRequest, options?: grpc.CallOptions): Promise; /** * RoleRevokePermission revokes a key or range permission of a specified role. */ roleRevokePermission(req: IAuthRoleRevokePermissionRequest, options?: grpc.CallOptions): Promise; } export interface IResponseHeader { /** * cluster_id is the ID of the cluster which sent the response. */ cluster_id: string; /** * member_id is the ID of the member which sent the response. */ member_id: string; /** * revision is the key-value store revision when the request was applied. */ revision: string; /** * raft_term is the raft term when the request was applied. */ raft_term: string; } export declare enum SortOrder { /** * default, no sorting */ None = 0, /** * lowest target value first */ Ascend = 1, /** * highest target value first */ Descend = 2 } export declare enum SortTarget { Key = 0, Version = 1, Create = 2, Mod = 3, Value = 4 } export interface IRangeRequest { /** * key is the first key for the range. If range_end is not given, the request only looks up key. */ key?: Buffer; /** * range_end is the upper bound on the requested range [key, range_end). * If range_end is '\0', the range is all keys >= key. * If range_end is key plus one (e.g., "aa"+1 == "ab", "a\xff"+1 == "b"), * then the range request gets all keys prefixed with key. * If both key and range_end are '\0', then the range request returns all keys. */ range_end?: Buffer; /** * limit is a limit on the number of keys returned for the request. When limit is set to 0, * it is treated as no limit. */ limit?: string | number; /** * revision is the point-in-time of the key-value store to use for the range. * If revision is less or equal to zero, the range is over the newest key-value store. * If the revision has been compacted, ErrCompacted is returned as a response. */ revision?: string | number; /** * sort_order is the order for returned sorted results. */ sort_order?: SortOrder | keyof typeof SortOrder; /** * sort_target is the key-value field to use for sorting. */ sort_target?: SortTarget | keyof typeof SortTarget; /** * serializable sets the range request to use serializable member-local reads. * Range requests are linearizable by default; linearizable requests have higher * latency and lower throughput than serializable requests but reflect the current * consensus of the cluster. For better performance, in exchange for possible stale reads, * a serializable range request is served locally without needing to reach consensus * with other nodes in the cluster. */ serializable?: boolean; /** * keys_only when set returns only the keys and not the values. */ keys_only?: boolean; /** * count_only when set returns only the count of the keys in the range. */ count_only?: boolean; /** * min_mod_revision is the lower bound for returned key mod revisions; all keys with * lesser mod revisions will be filtered away. */ min_mod_revision?: string | number; /** * max_mod_revision is the upper bound for returned key mod revisions; all keys with * greater mod revisions will be filtered away. */ max_mod_revision?: string | number; /** * min_create_revision is the lower bound for returned key create revisions; all keys with * lesser create trevisions will be filtered away. */ min_create_revision?: string | number; /** * max_create_revision is the upper bound for returned key create revisions; all keys with * greater create revisions will be filtered away. */ max_create_revision?: string | number; } export interface IRangeResponse { header: IResponseHeader; /** * kvs is the list of key-value pairs matched by the range request. * kvs is empty when count is requested. */ kvs: IKeyValue[]; /** * more indicates if there are more keys to return in the requested range. */ more: boolean; /** * count is set to the number of keys within the range when requested. */ count: string; } export interface IPutRequest { /** * key is the key, in bytes, to put into the key-value store. */ key?: Buffer; /** * value is the value, in bytes, to associate with the key in the key-value store. */ value?: Buffer; /** * lease is the lease ID to associate with the key in the key-value store. A lease * value of 0 indicates no lease. */ lease?: string | number; /** * If prev_kv is set, etcd gets the previous key-value pair before changing it. * The previous key-value pair will be returned in the put response. */ prev_kv?: boolean; /** * If ignore_value is set, etcd updates the key using its current value. * Returns an error if the key does not exist. */ ignore_value?: boolean; /** * If ignore_lease is set, etcd updates the key using its current lease. * Returns an error if the key does not exist. */ ignore_lease?: boolean; } export interface IPutResponse { header: IResponseHeader; /** * if prev_kv is set in the request, the previous key-value pair will be returned. */ prev_kv: IKeyValue; } export interface IDeleteRangeRequest { /** * key is the first key to delete in the range. */ key?: Buffer; /** * range_end is the key following the last key to delete for the range [key, range_end). * If range_end is not given, the range is defined to contain only the key argument. * If range_end is one bit larger than the given key, then the range is all the keys * with the prefix (the given key). * If range_end is '\0', the range is all keys greater than or equal to the key argument. */ range_end?: Buffer; /** * If prev_kv is set, etcd gets the previous key-value pairs before deleting it. * The previous key-value pairs will be returned in the delete response. */ prev_kv?: boolean; } export interface IDeleteRangeResponse { header: IResponseHeader; /** * deleted is the number of keys deleted by the delete range request. */ deleted: string; /** * if prev_kv is set in the request, the previous key-value pairs will be returned. */ prev_kvs: IKeyValue[]; } export interface IRequestOp { request_range?: IRangeRequest; request_put?: IPutRequest; request_delete_range?: IDeleteRangeRequest; request_txn?: ITxnRequest; } export interface IResponseOp { response_range: IRangeResponse; response_put: IPutResponse; response_delete_range: IDeleteRangeResponse; response_txn: ITxnResponse; } export declare enum CompareResult { Equal = 0, Greater = 1, Less = 2, NotEqual = 3 } export declare enum CompareTarget { Version = 0, Create = 1, Mod = 2, Value = 3, Lease = 4 } export interface ICompare { /** * result is logical comparison operation for this comparison. */ result?: CompareResult | keyof typeof CompareResult; /** * target is the key-value field to inspect for the comparison. */ target?: CompareTarget | keyof typeof CompareTarget; /** * key is the subject key for the comparison operation. */ key?: Buffer; /** * version is the version of the given key */ version?: string | number; /** * create_revision is the creation revision of the given key */ create_revision?: string | number; /** * mod_revision is the last modified revision of the given key. */ mod_revision?: string | number; /** * value is the value of the given key, in bytes. */ value?: Buffer; /** * lease is the lease id of the given key. */ lease?: string | number; /** * range_end compares the given target to all keys in the range [key, range_end). * See RangeRequest for more details on key ranges. */ range_end?: Buffer; } export interface ITxnRequest { /** * compare is a list of predicates representing a conjunction of terms. * If the comparisons succeed, then the success requests will be processed in order, * and the response will contain their respective responses in order. * If the comparisons fail, then the failure requests will be processed in order, * and the response will contain their respective responses in order. */ compare?: ICompare[]; /** * success is a list of requests which will be applied when compare evaluates to true. */ success?: IRequestOp[]; /** * failure is a list of requests which will be applied when compare evaluates to false. */ failure?: IRequestOp[]; } export interface ITxnResponse { header: IResponseHeader; /** * succeeded is set to true if the compare evaluated to true or false otherwise. */ succeeded: boolean; /** * responses is a list of responses corresponding to the results from applying * success if succeeded is true or failure if succeeded is false. */ responses: IResponseOp[]; } export interface ICompactionRequest { /** * revision is the key-value store revision for the compaction operation. */ revision?: string | number; /** * physical is set so the RPC will wait until the compaction is physically * applied to the local database such that compacted entries are totally * removed from the backend database. */ physical?: boolean; } export interface ICompactionResponse { header: IResponseHeader; } export interface IHashKVRequest { /** * revision is the key-value store revision for the hash operation. */ revision?: string | number; } export interface IHashKVResponse { header: IResponseHeader; /** * hash is the hash value computed from the responding member's MVCC keys up to a given revision. */ hash: string; /** * compact_revision is the compacted revision of key-value store when hash begins. */ compact_revision: string; } export interface IHashResponse { header: IResponseHeader; /** * hash is the hash value computed from the responding member's KV's backend. */ hash: string; } export interface ISnapshotResponse { /** * header has the current key-value store information. The first header in the snapshot * stream indicates the point in time of the snapshot. */ header: IResponseHeader; /** * remaining_bytes is the number of blob bytes to be sent after this message */ remaining_bytes: string; /** * blob contains the next chunk of the snapshot in the snapshot stream. */ blob: Buffer; } export interface IWatchRequest { create_request?: IWatchCreateRequest; cancel_request?: IWatchCancelRequest; } export declare enum FilterType { /** * filter out put event. */ Noput = 0, /** * filter out delete event. */ Nodelete = 1 } export interface IWatchCreateRequest { /** * key is the key to register for watching. */ key?: Buffer; /** * range_end is the end of the range [key, range_end) to watch. If range_end is not given, * only the key argument is watched. If range_end is equal to '\0', all keys greater than * or equal to the key argument are watched. * If the range_end is one bit larger than the given key, * then all keys with the prefix (the given key) will be watched. */ range_end?: Buffer; /** * start_revision is an optional revision to watch from (inclusive). No start_revision is "now". */ start_revision?: string | number; /** * progress_notify is set so that the etcd server will periodically send a WatchResponse with * no events to the new watcher if there are no recent events. It is useful when clients * wish to recover a disconnected watcher starting from a recent known revision. * The etcd server may decide how often it will send notifications based on current load. */ progress_notify?: boolean; /** * filters filter the events at server side before it sends back to the watcher. */ filters?: (FilterType | keyof typeof FilterType)[]; /** * If prev_kv is set, created watcher gets the previous KV before the event happens. * If the previous KV is already compacted, nothing will be returned. */ prev_kv?: boolean; } export interface IWatchCancelRequest { /** * watch_id is the watcher id to cancel so that no more events are transmitted. */ watch_id?: string | number; } export interface IWatchResponse { header: IResponseHeader; /** * watch_id is the ID of the watcher that corresponds to the response. */ watch_id: string; /** * created is set to true if the response is for a create watch request. * The client should record the watch_id and expect to receive events for * the created watcher from the same stream. * All events sent to the created watcher will attach with the same watch_id. */ created: boolean; /** * canceled is set to true if the response is for a cancel watch request. * No further events will be sent to the canceled watcher. */ canceled: boolean; compact_revision: string; /** * cancel_reason indicates the reason for canceling the watcher. */ cancel_reason: string; events: IEvent[]; } export interface ILeaseGrantRequest { /** * TTL is the advisory time-to-live in seconds. */ TTL?: string | number; /** * ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID. */ ID?: string | number; } export interface ILeaseGrantResponse { header: IResponseHeader; /** * ID is the lease ID for the granted lease. */ ID: string; /** * TTL is the server chosen lease time-to-live in seconds. */ TTL: string; error: string; } export interface ILeaseRevokeRequest { /** * ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted. */ ID?: string | number; } export interface ILeaseRevokeResponse { header: IResponseHeader; } export interface ILeaseKeepAliveRequest { /** * ID is the lease ID for the lease to keep alive. */ ID?: string | number; } export interface ILeaseKeepAliveResponse { header: IResponseHeader; /** * ID is the lease ID from the keep alive request. */ ID: string; /** * TTL is the new time-to-live for the lease. */ TTL: string; } export interface ILeaseTimeToLiveRequest { /** * ID is the lease ID for the lease. */ ID?: string | number; /** * keys is true to query all the keys attached to this lease. */ keys?: boolean; } export interface ILeaseTimeToLiveResponse { header: IResponseHeader; /** * ID is the lease ID from the keep alive request. */ ID: string; /** * TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds. */ TTL: string; /** * GrantedTTL is the initial granted time in seconds upon lease creation/renewal. */ grantedTTL: string; /** * Keys is the list of keys attached to this lease. */ keys: Buffer[]; } export interface ILeaseStatus { ID: string; } export interface ILeaseLeasesResponse { header: IResponseHeader; leases: ILeaseStatus[]; } export interface IMember { /** * ID is the member ID for this member. */ ID: string; /** * name is the human-readable name of the member. If the member is not started, the name will be an empty string. */ name: string; /** * peerURLs is the list of URLs the member exposes to the cluster for communication. */ peerURLs: string[]; /** * clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty. */ clientURLs: string[]; } export interface IMemberAddRequest { /** * peerURLs is the list of URLs the added member will use to communicate with the cluster. */ peerURLs?: string[]; } export interface IMemberAddResponse { header: IResponseHeader; /** * member is the member information for the added member. */ member: IMember; /** * members is a list of all members after adding the new member. */ members: IMember[]; } export interface IMemberRemoveRequest { /** * ID is the member ID of the member to remove. */ ID?: string | number; } export interface IMemberRemoveResponse { header: IResponseHeader; /** * members is a list of all members after removing the member. */ members: IMember[]; } export interface IMemberUpdateRequest { /** * ID is the member ID of the member to update. */ ID?: string | number; /** * peerURLs is the new list of URLs the member will use to communicate with the cluster. */ peerURLs?: string[]; } export interface IMemberUpdateResponse { header: IResponseHeader; /** * members is a list of all members after updating the member. */ members: IMember[]; } export interface IMemberListResponse { header: IResponseHeader; /** * members is a list of all members associated with the cluster. */ members: IMember[]; } export interface IDefragmentResponse { header: IResponseHeader; } export interface IMoveLeaderRequest { /** * targetID is the node ID for the new leader. */ targetID?: string | number; } export interface IMoveLeaderResponse { header: IResponseHeader; } export declare enum AlarmType { /** * default, used to query if any alarm is active */ None = 0, /** * space quota is exhausted */ Nospace = 1, /** * kv store corruption detected */ Corrupt = 2 } export declare enum AlarmAction { Get = 0, Activate = 1, Deactivate = 2 } export interface IAlarmRequest { /** * action is the kind of alarm request to issue. The action * may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a * raised alarm. */ action?: AlarmAction | keyof typeof AlarmAction; /** * memberID is the ID of the member associated with the alarm. If memberID is 0, the * alarm request covers all members. */ memberID?: string | number; /** * alarm is the type of alarm to consider for this request. */ alarm?: AlarmType | keyof typeof AlarmType; } export interface IAlarmMember { /** * memberID is the ID of the member associated with the raised alarm. */ memberID: string; /** * alarm is the type of alarm which has been raised. */ alarm: keyof typeof AlarmType; } export interface IAlarmResponse { header: IResponseHeader; /** * alarms is a list of alarms associated with the alarm request. */ alarms: IAlarmMember[]; } export interface IStatusResponse { header: IResponseHeader; /** * version is the cluster protocol version used by the responding member. */ version: string; /** * dbSize is the size of the backend database, in bytes, of the responding member. */ dbSize: string; /** * leader is the member ID which the responding member believes is the current leader. */ leader: string; /** * raftIndex is the current raft index of the responding member. */ raftIndex: string; /** * raftTerm is the current raft term of the responding member. */ raftTerm: string; } export interface IAuthenticateRequest { name?: string; password?: string; } export interface IAuthUserAddRequest { name?: string; password?: string; } export interface IAuthUserGetRequest { name?: string; } export interface IAuthUserDeleteRequest { /** * name is the name of the user to delete. */ name?: string; } export interface IAuthUserChangePasswordRequest { /** * name is the name of the user whose password is being changed. */ name?: string; /** * password is the new password for the user. */ password?: string; } export interface IAuthUserGrantRoleRequest { /** * user is the name of the user which should be granted a given role. */ user?: string; /** * role is the name of the role to grant to the user. */ role?: string; } export interface IAuthUserRevokeRoleRequest { name?: string; role?: string; } export interface IAuthRoleAddRequest { /** * name is the name of the role to add to the authentication system. */ name?: string; } export interface IAuthRoleGetRequest { role?: string; } export interface IAuthRoleDeleteRequest { role?: string; } export interface IAuthRoleGrantPermissionRequest { /** * name is the name of the role which will be granted the permission. */ name?: string; /** * perm is the permission to grant to the role. */ perm?: IPermission; } export interface IAuthRoleRevokePermissionRequest { role?: string; key?: string; range_end?: string; } export interface IAuthEnableResponse { header: IResponseHeader; } export interface IAuthDisableResponse { header: IResponseHeader; } export interface IAuthenticateResponse { header: IResponseHeader; /** * token is an authorized token that can be used in succeeding RPCs */ token: string; } export interface IAuthUserAddResponse { header: IResponseHeader; } export interface IAuthUserGetResponse { header: IResponseHeader; roles: string[]; } export interface IAuthUserDeleteResponse { header: IResponseHeader; } export interface IAuthUserChangePasswordResponse { header: IResponseHeader; } export interface IAuthUserGrantRoleResponse { header: IResponseHeader; } export interface IAuthUserRevokeRoleResponse { header: IResponseHeader; } export interface IAuthRoleAddResponse { header: IResponseHeader; } export interface IAuthRoleGetResponse { header: IResponseHeader; perm: IPermission[]; } export interface IAuthRoleListResponse { header: IResponseHeader; roles: string[]; } export interface IAuthUserListResponse { header: IResponseHeader; users: string[]; } export interface IAuthRoleDeleteResponse { header: IResponseHeader; } export interface IAuthRoleGrantPermissionResponse { header: IResponseHeader; } export interface IAuthRoleRevokePermissionResponse { header: IResponseHeader; } export interface IKeyValue { /** * key is the first key for the range. If range_end is not given, the request only looks up key. */ key: Buffer; create_revision: string; mod_revision: string; /** * version is the version of the given key */ version: string; /** * If ignore_value is set, etcd updates the key using its current value. * Returns an error if the key does not exist. */ value: Buffer; /** * If ignore_lease is set, etcd updates the key using its current lease. * Returns an error if the key does not exist. */ lease: string; } export declare enum EventType { Put = 0, Delete = 1 } export interface IEvent { type: keyof typeof EventType; /** * if prev_kv is set in the request, the previous key-value pair will be returned. */ kv: IKeyValue; /** * If prev_kv is set, etcd gets the previous key-value pairs before deleting it. * The previous key-value pairs will be returned in the delete response. */ prev_kv: IKeyValue; } export interface IUser { name?: Buffer; password?: Buffer; roles?: string[]; } export declare enum Permission { Read = 0, Write = 1, Readwrite = 2 } export interface IPermission { permType: keyof typeof Permission; key: Buffer; range_end: Buffer; } export interface IRole { name?: Buffer; keyPermission?: IPermission[]; } export declare const Services: { KV: typeof KVClient; Watch: typeof WatchClient; Lease: typeof LeaseClient; Cluster: typeof ClusterClient; Maintenance: typeof MaintenanceClient; Auth: typeof AuthClient; };