From 13b4d405f345816af2e6782d7af2a38c2440eb2e Mon Sep 17 00:00:00 2001 From: Kacy Fortner Date: Wed, 25 Feb 2026 14:19:51 -0500 Subject: [PATCH 1/2] feat(ts): scaffold ember-ts client with proto codegen adds clients/ember-ts/ with Makefile, package.json, and tsconfig.json. wires the root Makefile proto-ts target to delegate to the new client Makefile, matching the proto-go and proto-py pattern. generates 160 TypeScript type definitions from ember.proto via @grpc/proto-loader's proto-loader-gen-types. --- Makefile | 3 +- clients/ember-ts/Makefile | 13 + clients/ember-ts/package.json | 19 + .../src/generated/ember/v1/AppendRequest.ts | 12 + .../src/generated/ember/v1/ArrayResponse.ts | 10 + .../generated/ember/v1/BgRewriteAofRequest.ts | 8 + .../src/generated/ember/v1/BgSaveRequest.ts | 8 + .../generated/ember/v1/BoolArrayResponse.ts | 10 + .../src/generated/ember/v1/BoolResponse.ts | 10 + .../src/generated/ember/v1/ChannelCount.ts | 13 + .../src/generated/ember/v1/CopyRequest.ts | 14 + .../src/generated/ember/v1/DbSizeRequest.ts | 8 + .../src/generated/ember/v1/DecrByRequest.ts | 13 + .../src/generated/ember/v1/DecrRequest.ts | 10 + .../src/generated/ember/v1/DelRequest.ts | 10 + .../src/generated/ember/v1/DelResponse.ts | 11 + .../src/generated/ember/v1/EchoRequest.ts | 10 + .../src/generated/ember/v1/EchoResponse.ts | 10 + .../src/generated/ember/v1/EmberCache.ts | 266 ++++++++++++++ .../src/generated/ember/v1/ErrorKind.ts | 23 ++ .../src/generated/ember/v1/ErrorResponse.ts | 13 + .../src/generated/ember/v1/ExistsRequest.ts | 10 + .../src/generated/ember/v1/ExpireRequest.ts | 13 + .../src/generated/ember/v1/FieldValue.ts | 12 + .../src/generated/ember/v1/FloatResponse.ts | 10 + .../src/generated/ember/v1/FlushDbRequest.ts | 10 + .../src/generated/ember/v1/GetDelRequest.ts | 10 + .../src/generated/ember/v1/GetExRequest.ts | 17 + .../src/generated/ember/v1/GetRangeRequest.ts | 15 + .../src/generated/ember/v1/GetRequest.ts | 10 + .../src/generated/ember/v1/GetResponse.ts | 11 + .../src/generated/ember/v1/HDelRequest.ts | 12 + .../src/generated/ember/v1/HExistsRequest.ts | 12 + .../src/generated/ember/v1/HGetAllRequest.ts | 10 + .../src/generated/ember/v1/HGetRequest.ts | 12 + .../src/generated/ember/v1/HIncrByRequest.ts | 15 + .../src/generated/ember/v1/HKeysRequest.ts | 10 + .../src/generated/ember/v1/HLenRequest.ts | 10 + .../src/generated/ember/v1/HMGetRequest.ts | 12 + .../src/generated/ember/v1/HScanRequest.ts | 18 + .../src/generated/ember/v1/HScanResponse.ts | 14 + .../src/generated/ember/v1/HSetRequest.ts | 13 + .../src/generated/ember/v1/HValsRequest.ts | 10 + .../src/generated/ember/v1/HashResponse.ts | 11 + .../generated/ember/v1/IncrByFloatRequest.ts | 12 + .../src/generated/ember/v1/IncrByRequest.ts | 13 + .../src/generated/ember/v1/IncrRequest.ts | 10 + .../src/generated/ember/v1/InfoRequest.ts | 11 + .../src/generated/ember/v1/InfoResponse.ts | 10 + .../src/generated/ember/v1/IntResponse.ts | 11 + .../src/generated/ember/v1/KeyValue.ts | 12 + .../src/generated/ember/v1/KeysRequest.ts | 10 + .../src/generated/ember/v1/KeysResponse.ts | 10 + .../src/generated/ember/v1/LIndexRequest.ts | 13 + .../src/generated/ember/v1/LInsertRequest.ts | 16 + .../src/generated/ember/v1/LLenRequest.ts | 10 + .../src/generated/ember/v1/LMoveRequest.ts | 16 + .../src/generated/ember/v1/LPopRequest.ts | 10 + .../src/generated/ember/v1/LPosRequest.ts | 15 + .../src/generated/ember/v1/LPushRequest.ts | 12 + .../src/generated/ember/v1/LRangeRequest.ts | 15 + .../src/generated/ember/v1/LRemRequest.ts | 15 + .../src/generated/ember/v1/LSetRequest.ts | 15 + .../src/generated/ember/v1/LTrimRequest.ts | 15 + .../src/generated/ember/v1/LastSaveRequest.ts | 8 + .../src/generated/ember/v1/MGetRequest.ts | 10 + .../src/generated/ember/v1/MGetResponse.ts | 11 + .../src/generated/ember/v1/MSetRequest.ts | 11 + .../src/generated/ember/v1/MSetResponse.ts | 8 + .../ember/v1/OptionalArrayResponse.ts | 11 + .../ember/v1/OptionalFloatResponse.ts | 11 + .../generated/ember/v1/OptionalIntResponse.ts | 12 + .../src/generated/ember/v1/OptionalValue.ts | 11 + .../src/generated/ember/v1/PExpireRequest.ts | 13 + .../src/generated/ember/v1/PTtlRequest.ts | 10 + .../src/generated/ember/v1/PersistRequest.ts | 10 + .../src/generated/ember/v1/PingRequest.ts | 11 + .../src/generated/ember/v1/PingResponse.ts | 10 + .../src/generated/ember/v1/PipelineRequest.ts | 342 ++++++++++++++++++ .../generated/ember/v1/PipelineResponse.ts | 111 ++++++ .../ember/v1/PubSubChannelsRequest.ts | 11 + .../generated/ember/v1/PubSubNumPatRequest.ts | 8 + .../generated/ember/v1/PubSubNumSubRequest.ts | 10 + .../ember/v1/PubSubNumSubResponse.ts | 11 + .../src/generated/ember/v1/PublishRequest.ts | 12 + .../src/generated/ember/v1/RPopRequest.ts | 10 + .../src/generated/ember/v1/RPushRequest.ts | 12 + .../generated/ember/v1/RandomKeyRequest.ts | 8 + .../src/generated/ember/v1/RenameRequest.ts | 12 + .../src/generated/ember/v1/SAddRequest.ts | 12 + .../src/generated/ember/v1/SCardRequest.ts | 10 + .../src/generated/ember/v1/SDiffRequest.ts | 10 + .../generated/ember/v1/SDiffStoreRequest.ts | 12 + .../src/generated/ember/v1/SInterRequest.ts | 10 + .../generated/ember/v1/SInterStoreRequest.ts | 12 + .../generated/ember/v1/SIsMemberRequest.ts | 12 + .../src/generated/ember/v1/SMembersRequest.ts | 10 + .../generated/ember/v1/SMisMemberRequest.ts | 12 + .../src/generated/ember/v1/SPopRequest.ts | 12 + .../generated/ember/v1/SRandMemberRequest.ts | 12 + .../src/generated/ember/v1/SRemRequest.ts | 12 + .../src/generated/ember/v1/SScanRequest.ts | 18 + .../src/generated/ember/v1/SScanResponse.ts | 13 + .../src/generated/ember/v1/SUnionRequest.ts | 10 + .../generated/ember/v1/SUnionStoreRequest.ts | 12 + .../src/generated/ember/v1/ScanRequest.ts | 16 + .../src/generated/ember/v1/ScanResponse.ts | 13 + .../src/generated/ember/v1/ScoreMember.ts | 12 + .../src/generated/ember/v1/SetRangeRequest.ts | 15 + .../src/generated/ember/v1/SetRequest.ts | 21 ++ .../src/generated/ember/v1/SetResponse.ts | 10 + .../src/generated/ember/v1/SlowLogEntry.ts | 17 + .../generated/ember/v1/SlowLogGetRequest.ts | 11 + .../generated/ember/v1/SlowLogGetResponse.ts | 11 + .../generated/ember/v1/SlowLogLenRequest.ts | 8 + .../generated/ember/v1/SlowLogResetRequest.ts | 8 + .../src/generated/ember/v1/StatusResponse.ts | 10 + .../src/generated/ember/v1/StrlenRequest.ts | 10 + .../src/generated/ember/v1/SubscribeEvent.ts | 17 + .../generated/ember/v1/SubscribeRequest.ts | 12 + .../src/generated/ember/v1/TimeRequest.ts | 8 + .../src/generated/ember/v1/TimeResponse.ts | 13 + .../src/generated/ember/v1/TouchRequest.ts | 10 + .../src/generated/ember/v1/TtlRequest.ts | 10 + .../src/generated/ember/v1/TtlResponse.ts | 11 + .../src/generated/ember/v1/TypeRequest.ts | 10 + .../src/generated/ember/v1/TypeResponse.ts | 10 + .../src/generated/ember/v1/UnlinkRequest.ts | 10 + .../src/generated/ember/v1/VAddBatchEntry.ts | 12 + .../generated/ember/v1/VAddBatchRequest.ts | 25 ++ .../src/generated/ember/v1/VAddRequest.ts | 26 ++ .../src/generated/ember/v1/VCardRequest.ts | 10 + .../src/generated/ember/v1/VDimRequest.ts | 10 + .../src/generated/ember/v1/VGetRequest.ts | 12 + .../src/generated/ember/v1/VGetResponse.ts | 13 + .../src/generated/ember/v1/VInfoRequest.ts | 10 + .../src/generated/ember/v1/VInfoResponse.ts | 13 + .../src/generated/ember/v1/VRemRequest.ts | 12 + .../src/generated/ember/v1/VSimRequest.ts | 17 + .../src/generated/ember/v1/VSimResponse.ts | 11 + .../src/generated/ember/v1/VSimResult.ts | 12 + .../src/generated/ember/v1/VectorMetric.ts | 17 + .../generated/ember/v1/VectorQuantization.ts | 17 + .../src/generated/ember/v1/ZAddRequest.ts | 23 ++ .../src/generated/ember/v1/ZCardRequest.ts | 10 + .../src/generated/ember/v1/ZCountRequest.ts | 14 + .../src/generated/ember/v1/ZDiffRequest.ts | 12 + .../src/generated/ember/v1/ZIncrByRequest.ts | 14 + .../src/generated/ember/v1/ZInterRequest.ts | 12 + .../src/generated/ember/v1/ZPopMaxRequest.ts | 12 + .../src/generated/ember/v1/ZPopMinRequest.ts | 12 + .../ember/v1/ZRangeByScoreRequest.ts | 23 ++ .../src/generated/ember/v1/ZRangeRequest.ts | 17 + .../src/generated/ember/v1/ZRangeResponse.ts | 11 + .../src/generated/ember/v1/ZRankRequest.ts | 12 + .../src/generated/ember/v1/ZRemRequest.ts | 12 + .../ember/v1/ZRevRangeByScoreRequest.ts | 23 ++ .../generated/ember/v1/ZRevRangeRequest.ts | 17 + .../src/generated/ember/v1/ZRevRankRequest.ts | 12 + .../src/generated/ember/v1/ZScanRequest.ts | 18 + .../src/generated/ember/v1/ZScanResponse.ts | 14 + .../src/generated/ember/v1/ZScoreRequest.ts | 12 + .../src/generated/ember/v1/ZUnionRequest.ts | 12 + clients/ember-ts/tsconfig.json | 15 + 164 files changed, 2700 insertions(+), 2 deletions(-) create mode 100644 clients/ember-ts/Makefile create mode 100644 clients/ember-ts/package.json create mode 100644 clients/ember-ts/src/generated/ember/v1/AppendRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ArrayResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/BgRewriteAofRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/BgSaveRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/BoolArrayResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/BoolResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ChannelCount.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/CopyRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/DbSizeRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/DecrByRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/DecrRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/DelRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/DelResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/EchoRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/EchoResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/EmberCache.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ErrorKind.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ErrorResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ExistsRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ExpireRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/FieldValue.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/FloatResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/FlushDbRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/GetDelRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/GetExRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/GetRangeRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/GetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/GetResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HDelRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HExistsRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HGetAllRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HGetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HIncrByRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HKeysRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HLenRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HMGetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HScanRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HScanResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HSetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HValsRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/HashResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/IncrByFloatRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/IncrByRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/IncrRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/InfoRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/InfoResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/IntResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/KeyValue.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/KeysRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/KeysResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LIndexRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LInsertRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LLenRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LMoveRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LPopRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LPosRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LPushRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LRangeRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LRemRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LSetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LTrimRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/LastSaveRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/MGetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/MGetResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/MSetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/MSetResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/OptionalArrayResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/OptionalFloatResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/OptionalIntResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/OptionalValue.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PExpireRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PTtlRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PersistRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PingRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PingResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PipelineRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PipelineResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PubSubChannelsRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PubSubNumPatRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PubSubNumSubRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PubSubNumSubResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/PublishRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/RPopRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/RPushRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/RandomKeyRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/RenameRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SAddRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SCardRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SDiffRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SDiffStoreRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SInterRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SInterStoreRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SIsMemberRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SMembersRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SMisMemberRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SPopRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SRandMemberRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SRemRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SScanRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SScanResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SUnionRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SUnionStoreRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ScanRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ScanResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ScoreMember.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SetRangeRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SetResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SlowLogEntry.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SlowLogGetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SlowLogGetResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SlowLogLenRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SlowLogResetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/StatusResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/StrlenRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SubscribeEvent.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/SubscribeRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/TimeRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/TimeResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/TouchRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/TtlRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/TtlResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/TypeRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/TypeResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/UnlinkRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VAddBatchEntry.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VAddBatchRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VAddRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VCardRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VDimRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VGetRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VGetResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VInfoRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VInfoResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VRemRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VSimRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VSimResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VSimResult.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VectorMetric.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/VectorQuantization.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZAddRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZCardRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZCountRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZDiffRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZIncrByRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZInterRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZPopMaxRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZPopMinRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZRangeByScoreRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZRangeRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZRangeResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZRankRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZRemRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZRevRangeByScoreRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZRevRangeRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZRevRankRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZScanRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZScanResponse.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZScoreRequest.ts create mode 100644 clients/ember-ts/src/generated/ember/v1/ZUnionRequest.ts create mode 100644 clients/ember-ts/tsconfig.json diff --git a/Makefile b/Makefile index c83dd6c5..57181f8a 100644 --- a/Makefile +++ b/Makefile @@ -155,8 +155,7 @@ proto-py: cd clients/ember-py && $(MAKE) proto-gen proto-ts: - @echo "TypeScript gRPC client codegen: run the following in clients/ember-ts/" - @echo " npx @grpc/proto-loader-gen-types proto/ember/v1/ember.proto --outDir=src/generated" + cd clients/ember-ts && $(MAKE) proto-gen # --- helm --- diff --git a/clients/ember-ts/Makefile b/clients/ember-ts/Makefile new file mode 100644 index 00000000..1d9af69e --- /dev/null +++ b/clients/ember-ts/Makefile @@ -0,0 +1,13 @@ +.PHONY: proto-gen test clean + +proto-gen: + npx --yes --package=@grpc/proto-loader proto-loader-gen-types \ + --proto_path=../../proto \ + --outDir=src/generated \ + ../../proto/ember/v1/ember.proto + +test: + npm test + +clean: + rm -rf src/generated node_modules diff --git a/clients/ember-ts/package.json b/clients/ember-ts/package.json new file mode 100644 index 00000000..84c12e0d --- /dev/null +++ b/clients/ember-ts/package.json @@ -0,0 +1,19 @@ +{ + "name": "ember-ts", + "version": "0.1.0", + "description": "TypeScript client for the ember cache server over gRPC", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "tsc", + "test": "echo \"no tests yet\"", + "proto-gen": "npx --package=@grpc/proto-loader proto-loader-gen-types --proto_path=../../proto --outDir=src/generated ../../proto/ember/v1/ember.proto" + }, + "dependencies": { + "@grpc/grpc-js": "^1.12.0", + "@grpc/proto-loader": "^0.7.0" + }, + "devDependencies": { + "typescript": "^5.0.0" + } +} diff --git a/clients/ember-ts/src/generated/ember/v1/AppendRequest.ts b/clients/ember-ts/src/generated/ember/v1/AppendRequest.ts new file mode 100644 index 00000000..820fdd80 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/AppendRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface AppendRequest { + 'key'?: (string); + 'value'?: (Buffer | Uint8Array | string); +} + +export interface AppendRequest__Output { + 'key'?: (string); + 'value'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ArrayResponse.ts b/clients/ember-ts/src/generated/ember/v1/ArrayResponse.ts new file mode 100644 index 00000000..6018cb0e --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ArrayResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ArrayResponse { + 'values'?: (Buffer | Uint8Array | string)[]; +} + +export interface ArrayResponse__Output { + 'values'?: (Buffer)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/BgRewriteAofRequest.ts b/clients/ember-ts/src/generated/ember/v1/BgRewriteAofRequest.ts new file mode 100644 index 00000000..7347922e --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/BgRewriteAofRequest.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface BgRewriteAofRequest { +} + +export interface BgRewriteAofRequest__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/BgSaveRequest.ts b/clients/ember-ts/src/generated/ember/v1/BgSaveRequest.ts new file mode 100644 index 00000000..51485eb2 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/BgSaveRequest.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface BgSaveRequest { +} + +export interface BgSaveRequest__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/BoolArrayResponse.ts b/clients/ember-ts/src/generated/ember/v1/BoolArrayResponse.ts new file mode 100644 index 00000000..c96e9930 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/BoolArrayResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface BoolArrayResponse { + 'values'?: (boolean)[]; +} + +export interface BoolArrayResponse__Output { + 'values'?: (boolean)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/BoolResponse.ts b/clients/ember-ts/src/generated/ember/v1/BoolResponse.ts new file mode 100644 index 00000000..1f5a07d0 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/BoolResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface BoolResponse { + 'value'?: (boolean); +} + +export interface BoolResponse__Output { + 'value'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ChannelCount.ts b/clients/ember-ts/src/generated/ember/v1/ChannelCount.ts new file mode 100644 index 00000000..d636e814 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ChannelCount.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface ChannelCount { + 'channel'?: (string); + 'count'?: (number | string | Long); +} + +export interface ChannelCount__Output { + 'channel'?: (string); + 'count'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/CopyRequest.ts b/clients/ember-ts/src/generated/ember/v1/CopyRequest.ts new file mode 100644 index 00000000..f1b911d7 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/CopyRequest.ts @@ -0,0 +1,14 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface CopyRequest { + 'source'?: (string); + 'destination'?: (string); + 'replace'?: (boolean); +} + +export interface CopyRequest__Output { + 'source'?: (string); + 'destination'?: (string); + 'replace'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/DbSizeRequest.ts b/clients/ember-ts/src/generated/ember/v1/DbSizeRequest.ts new file mode 100644 index 00000000..57478946 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/DbSizeRequest.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface DbSizeRequest { +} + +export interface DbSizeRequest__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/DecrByRequest.ts b/clients/ember-ts/src/generated/ember/v1/DecrByRequest.ts new file mode 100644 index 00000000..b9d6ab92 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/DecrByRequest.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface DecrByRequest { + 'key'?: (string); + 'delta'?: (number | string | Long); +} + +export interface DecrByRequest__Output { + 'key'?: (string); + 'delta'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/DecrRequest.ts b/clients/ember-ts/src/generated/ember/v1/DecrRequest.ts new file mode 100644 index 00000000..8565889f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/DecrRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface DecrRequest { + 'key'?: (string); +} + +export interface DecrRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/DelRequest.ts b/clients/ember-ts/src/generated/ember/v1/DelRequest.ts new file mode 100644 index 00000000..0a796d0f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/DelRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface DelRequest { + 'keys'?: (string)[]; +} + +export interface DelRequest__Output { + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/DelResponse.ts b/clients/ember-ts/src/generated/ember/v1/DelResponse.ts new file mode 100644 index 00000000..abed525a --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/DelResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface DelResponse { + 'deleted'?: (number | string | Long); +} + +export interface DelResponse__Output { + 'deleted'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/EchoRequest.ts b/clients/ember-ts/src/generated/ember/v1/EchoRequest.ts new file mode 100644 index 00000000..4dd8b91e --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/EchoRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface EchoRequest { + 'message'?: (string); +} + +export interface EchoRequest__Output { + 'message'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/EchoResponse.ts b/clients/ember-ts/src/generated/ember/v1/EchoResponse.ts new file mode 100644 index 00000000..3283b2e4 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/EchoResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface EchoResponse { + 'message'?: (string); +} + +export interface EchoResponse__Output { + 'message'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/EmberCache.ts b/clients/ember-ts/src/generated/ember/v1/EmberCache.ts new file mode 100644 index 00000000..f6d41901 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/EmberCache.ts @@ -0,0 +1,266 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { MethodDefinition } from '@grpc/proto-loader' +import type { AppendRequest as _ember_v1_AppendRequest, AppendRequest__Output as _ember_v1_AppendRequest__Output } from '../../ember/v1/AppendRequest'; +import type { ArrayResponse as _ember_v1_ArrayResponse, ArrayResponse__Output as _ember_v1_ArrayResponse__Output } from '../../ember/v1/ArrayResponse'; +import type { BgRewriteAofRequest as _ember_v1_BgRewriteAofRequest, BgRewriteAofRequest__Output as _ember_v1_BgRewriteAofRequest__Output } from '../../ember/v1/BgRewriteAofRequest'; +import type { BgSaveRequest as _ember_v1_BgSaveRequest, BgSaveRequest__Output as _ember_v1_BgSaveRequest__Output } from '../../ember/v1/BgSaveRequest'; +import type { BoolArrayResponse as _ember_v1_BoolArrayResponse, BoolArrayResponse__Output as _ember_v1_BoolArrayResponse__Output } from '../../ember/v1/BoolArrayResponse'; +import type { BoolResponse as _ember_v1_BoolResponse, BoolResponse__Output as _ember_v1_BoolResponse__Output } from '../../ember/v1/BoolResponse'; +import type { CopyRequest as _ember_v1_CopyRequest, CopyRequest__Output as _ember_v1_CopyRequest__Output } from '../../ember/v1/CopyRequest'; +import type { DbSizeRequest as _ember_v1_DbSizeRequest, DbSizeRequest__Output as _ember_v1_DbSizeRequest__Output } from '../../ember/v1/DbSizeRequest'; +import type { DecrByRequest as _ember_v1_DecrByRequest, DecrByRequest__Output as _ember_v1_DecrByRequest__Output } from '../../ember/v1/DecrByRequest'; +import type { DecrRequest as _ember_v1_DecrRequest, DecrRequest__Output as _ember_v1_DecrRequest__Output } from '../../ember/v1/DecrRequest'; +import type { DelRequest as _ember_v1_DelRequest, DelRequest__Output as _ember_v1_DelRequest__Output } from '../../ember/v1/DelRequest'; +import type { DelResponse as _ember_v1_DelResponse, DelResponse__Output as _ember_v1_DelResponse__Output } from '../../ember/v1/DelResponse'; +import type { EchoRequest as _ember_v1_EchoRequest, EchoRequest__Output as _ember_v1_EchoRequest__Output } from '../../ember/v1/EchoRequest'; +import type { EchoResponse as _ember_v1_EchoResponse, EchoResponse__Output as _ember_v1_EchoResponse__Output } from '../../ember/v1/EchoResponse'; +import type { ExistsRequest as _ember_v1_ExistsRequest, ExistsRequest__Output as _ember_v1_ExistsRequest__Output } from '../../ember/v1/ExistsRequest'; +import type { ExpireRequest as _ember_v1_ExpireRequest, ExpireRequest__Output as _ember_v1_ExpireRequest__Output } from '../../ember/v1/ExpireRequest'; +import type { FloatResponse as _ember_v1_FloatResponse, FloatResponse__Output as _ember_v1_FloatResponse__Output } from '../../ember/v1/FloatResponse'; +import type { FlushDbRequest as _ember_v1_FlushDbRequest, FlushDbRequest__Output as _ember_v1_FlushDbRequest__Output } from '../../ember/v1/FlushDbRequest'; +import type { GetDelRequest as _ember_v1_GetDelRequest, GetDelRequest__Output as _ember_v1_GetDelRequest__Output } from '../../ember/v1/GetDelRequest'; +import type { GetExRequest as _ember_v1_GetExRequest, GetExRequest__Output as _ember_v1_GetExRequest__Output } from '../../ember/v1/GetExRequest'; +import type { GetRangeRequest as _ember_v1_GetRangeRequest, GetRangeRequest__Output as _ember_v1_GetRangeRequest__Output } from '../../ember/v1/GetRangeRequest'; +import type { GetRequest as _ember_v1_GetRequest, GetRequest__Output as _ember_v1_GetRequest__Output } from '../../ember/v1/GetRequest'; +import type { GetResponse as _ember_v1_GetResponse, GetResponse__Output as _ember_v1_GetResponse__Output } from '../../ember/v1/GetResponse'; +import type { HDelRequest as _ember_v1_HDelRequest, HDelRequest__Output as _ember_v1_HDelRequest__Output } from '../../ember/v1/HDelRequest'; +import type { HExistsRequest as _ember_v1_HExistsRequest, HExistsRequest__Output as _ember_v1_HExistsRequest__Output } from '../../ember/v1/HExistsRequest'; +import type { HGetAllRequest as _ember_v1_HGetAllRequest, HGetAllRequest__Output as _ember_v1_HGetAllRequest__Output } from '../../ember/v1/HGetAllRequest'; +import type { HGetRequest as _ember_v1_HGetRequest, HGetRequest__Output as _ember_v1_HGetRequest__Output } from '../../ember/v1/HGetRequest'; +import type { HIncrByRequest as _ember_v1_HIncrByRequest, HIncrByRequest__Output as _ember_v1_HIncrByRequest__Output } from '../../ember/v1/HIncrByRequest'; +import type { HKeysRequest as _ember_v1_HKeysRequest, HKeysRequest__Output as _ember_v1_HKeysRequest__Output } from '../../ember/v1/HKeysRequest'; +import type { HLenRequest as _ember_v1_HLenRequest, HLenRequest__Output as _ember_v1_HLenRequest__Output } from '../../ember/v1/HLenRequest'; +import type { HMGetRequest as _ember_v1_HMGetRequest, HMGetRequest__Output as _ember_v1_HMGetRequest__Output } from '../../ember/v1/HMGetRequest'; +import type { HScanRequest as _ember_v1_HScanRequest, HScanRequest__Output as _ember_v1_HScanRequest__Output } from '../../ember/v1/HScanRequest'; +import type { HScanResponse as _ember_v1_HScanResponse, HScanResponse__Output as _ember_v1_HScanResponse__Output } from '../../ember/v1/HScanResponse'; +import type { HSetRequest as _ember_v1_HSetRequest, HSetRequest__Output as _ember_v1_HSetRequest__Output } from '../../ember/v1/HSetRequest'; +import type { HValsRequest as _ember_v1_HValsRequest, HValsRequest__Output as _ember_v1_HValsRequest__Output } from '../../ember/v1/HValsRequest'; +import type { HashResponse as _ember_v1_HashResponse, HashResponse__Output as _ember_v1_HashResponse__Output } from '../../ember/v1/HashResponse'; +import type { IncrByFloatRequest as _ember_v1_IncrByFloatRequest, IncrByFloatRequest__Output as _ember_v1_IncrByFloatRequest__Output } from '../../ember/v1/IncrByFloatRequest'; +import type { IncrByRequest as _ember_v1_IncrByRequest, IncrByRequest__Output as _ember_v1_IncrByRequest__Output } from '../../ember/v1/IncrByRequest'; +import type { IncrRequest as _ember_v1_IncrRequest, IncrRequest__Output as _ember_v1_IncrRequest__Output } from '../../ember/v1/IncrRequest'; +import type { InfoRequest as _ember_v1_InfoRequest, InfoRequest__Output as _ember_v1_InfoRequest__Output } from '../../ember/v1/InfoRequest'; +import type { InfoResponse as _ember_v1_InfoResponse, InfoResponse__Output as _ember_v1_InfoResponse__Output } from '../../ember/v1/InfoResponse'; +import type { IntResponse as _ember_v1_IntResponse, IntResponse__Output as _ember_v1_IntResponse__Output } from '../../ember/v1/IntResponse'; +import type { KeysRequest as _ember_v1_KeysRequest, KeysRequest__Output as _ember_v1_KeysRequest__Output } from '../../ember/v1/KeysRequest'; +import type { KeysResponse as _ember_v1_KeysResponse, KeysResponse__Output as _ember_v1_KeysResponse__Output } from '../../ember/v1/KeysResponse'; +import type { LIndexRequest as _ember_v1_LIndexRequest, LIndexRequest__Output as _ember_v1_LIndexRequest__Output } from '../../ember/v1/LIndexRequest'; +import type { LInsertRequest as _ember_v1_LInsertRequest, LInsertRequest__Output as _ember_v1_LInsertRequest__Output } from '../../ember/v1/LInsertRequest'; +import type { LLenRequest as _ember_v1_LLenRequest, LLenRequest__Output as _ember_v1_LLenRequest__Output } from '../../ember/v1/LLenRequest'; +import type { LMoveRequest as _ember_v1_LMoveRequest, LMoveRequest__Output as _ember_v1_LMoveRequest__Output } from '../../ember/v1/LMoveRequest'; +import type { LPopRequest as _ember_v1_LPopRequest, LPopRequest__Output as _ember_v1_LPopRequest__Output } from '../../ember/v1/LPopRequest'; +import type { LPosRequest as _ember_v1_LPosRequest, LPosRequest__Output as _ember_v1_LPosRequest__Output } from '../../ember/v1/LPosRequest'; +import type { LPushRequest as _ember_v1_LPushRequest, LPushRequest__Output as _ember_v1_LPushRequest__Output } from '../../ember/v1/LPushRequest'; +import type { LRangeRequest as _ember_v1_LRangeRequest, LRangeRequest__Output as _ember_v1_LRangeRequest__Output } from '../../ember/v1/LRangeRequest'; +import type { LRemRequest as _ember_v1_LRemRequest, LRemRequest__Output as _ember_v1_LRemRequest__Output } from '../../ember/v1/LRemRequest'; +import type { LSetRequest as _ember_v1_LSetRequest, LSetRequest__Output as _ember_v1_LSetRequest__Output } from '../../ember/v1/LSetRequest'; +import type { LTrimRequest as _ember_v1_LTrimRequest, LTrimRequest__Output as _ember_v1_LTrimRequest__Output } from '../../ember/v1/LTrimRequest'; +import type { LastSaveRequest as _ember_v1_LastSaveRequest, LastSaveRequest__Output as _ember_v1_LastSaveRequest__Output } from '../../ember/v1/LastSaveRequest'; +import type { MGetRequest as _ember_v1_MGetRequest, MGetRequest__Output as _ember_v1_MGetRequest__Output } from '../../ember/v1/MGetRequest'; +import type { MGetResponse as _ember_v1_MGetResponse, MGetResponse__Output as _ember_v1_MGetResponse__Output } from '../../ember/v1/MGetResponse'; +import type { MSetRequest as _ember_v1_MSetRequest, MSetRequest__Output as _ember_v1_MSetRequest__Output } from '../../ember/v1/MSetRequest'; +import type { MSetResponse as _ember_v1_MSetResponse, MSetResponse__Output as _ember_v1_MSetResponse__Output } from '../../ember/v1/MSetResponse'; +import type { OptionalArrayResponse as _ember_v1_OptionalArrayResponse, OptionalArrayResponse__Output as _ember_v1_OptionalArrayResponse__Output } from '../../ember/v1/OptionalArrayResponse'; +import type { OptionalFloatResponse as _ember_v1_OptionalFloatResponse, OptionalFloatResponse__Output as _ember_v1_OptionalFloatResponse__Output } from '../../ember/v1/OptionalFloatResponse'; +import type { OptionalIntResponse as _ember_v1_OptionalIntResponse, OptionalIntResponse__Output as _ember_v1_OptionalIntResponse__Output } from '../../ember/v1/OptionalIntResponse'; +import type { PExpireRequest as _ember_v1_PExpireRequest, PExpireRequest__Output as _ember_v1_PExpireRequest__Output } from '../../ember/v1/PExpireRequest'; +import type { PTtlRequest as _ember_v1_PTtlRequest, PTtlRequest__Output as _ember_v1_PTtlRequest__Output } from '../../ember/v1/PTtlRequest'; +import type { PersistRequest as _ember_v1_PersistRequest, PersistRequest__Output as _ember_v1_PersistRequest__Output } from '../../ember/v1/PersistRequest'; +import type { PingRequest as _ember_v1_PingRequest, PingRequest__Output as _ember_v1_PingRequest__Output } from '../../ember/v1/PingRequest'; +import type { PingResponse as _ember_v1_PingResponse, PingResponse__Output as _ember_v1_PingResponse__Output } from '../../ember/v1/PingResponse'; +import type { PipelineRequest as _ember_v1_PipelineRequest, PipelineRequest__Output as _ember_v1_PipelineRequest__Output } from '../../ember/v1/PipelineRequest'; +import type { PipelineResponse as _ember_v1_PipelineResponse, PipelineResponse__Output as _ember_v1_PipelineResponse__Output } from '../../ember/v1/PipelineResponse'; +import type { PubSubChannelsRequest as _ember_v1_PubSubChannelsRequest, PubSubChannelsRequest__Output as _ember_v1_PubSubChannelsRequest__Output } from '../../ember/v1/PubSubChannelsRequest'; +import type { PubSubNumPatRequest as _ember_v1_PubSubNumPatRequest, PubSubNumPatRequest__Output as _ember_v1_PubSubNumPatRequest__Output } from '../../ember/v1/PubSubNumPatRequest'; +import type { PubSubNumSubRequest as _ember_v1_PubSubNumSubRequest, PubSubNumSubRequest__Output as _ember_v1_PubSubNumSubRequest__Output } from '../../ember/v1/PubSubNumSubRequest'; +import type { PubSubNumSubResponse as _ember_v1_PubSubNumSubResponse, PubSubNumSubResponse__Output as _ember_v1_PubSubNumSubResponse__Output } from '../../ember/v1/PubSubNumSubResponse'; +import type { PublishRequest as _ember_v1_PublishRequest, PublishRequest__Output as _ember_v1_PublishRequest__Output } from '../../ember/v1/PublishRequest'; +import type { RPopRequest as _ember_v1_RPopRequest, RPopRequest__Output as _ember_v1_RPopRequest__Output } from '../../ember/v1/RPopRequest'; +import type { RPushRequest as _ember_v1_RPushRequest, RPushRequest__Output as _ember_v1_RPushRequest__Output } from '../../ember/v1/RPushRequest'; +import type { RandomKeyRequest as _ember_v1_RandomKeyRequest, RandomKeyRequest__Output as _ember_v1_RandomKeyRequest__Output } from '../../ember/v1/RandomKeyRequest'; +import type { RenameRequest as _ember_v1_RenameRequest, RenameRequest__Output as _ember_v1_RenameRequest__Output } from '../../ember/v1/RenameRequest'; +import type { SAddRequest as _ember_v1_SAddRequest, SAddRequest__Output as _ember_v1_SAddRequest__Output } from '../../ember/v1/SAddRequest'; +import type { SCardRequest as _ember_v1_SCardRequest, SCardRequest__Output as _ember_v1_SCardRequest__Output } from '../../ember/v1/SCardRequest'; +import type { SDiffRequest as _ember_v1_SDiffRequest, SDiffRequest__Output as _ember_v1_SDiffRequest__Output } from '../../ember/v1/SDiffRequest'; +import type { SDiffStoreRequest as _ember_v1_SDiffStoreRequest, SDiffStoreRequest__Output as _ember_v1_SDiffStoreRequest__Output } from '../../ember/v1/SDiffStoreRequest'; +import type { SInterRequest as _ember_v1_SInterRequest, SInterRequest__Output as _ember_v1_SInterRequest__Output } from '../../ember/v1/SInterRequest'; +import type { SInterStoreRequest as _ember_v1_SInterStoreRequest, SInterStoreRequest__Output as _ember_v1_SInterStoreRequest__Output } from '../../ember/v1/SInterStoreRequest'; +import type { SIsMemberRequest as _ember_v1_SIsMemberRequest, SIsMemberRequest__Output as _ember_v1_SIsMemberRequest__Output } from '../../ember/v1/SIsMemberRequest'; +import type { SMembersRequest as _ember_v1_SMembersRequest, SMembersRequest__Output as _ember_v1_SMembersRequest__Output } from '../../ember/v1/SMembersRequest'; +import type { SMisMemberRequest as _ember_v1_SMisMemberRequest, SMisMemberRequest__Output as _ember_v1_SMisMemberRequest__Output } from '../../ember/v1/SMisMemberRequest'; +import type { SPopRequest as _ember_v1_SPopRequest, SPopRequest__Output as _ember_v1_SPopRequest__Output } from '../../ember/v1/SPopRequest'; +import type { SRandMemberRequest as _ember_v1_SRandMemberRequest, SRandMemberRequest__Output as _ember_v1_SRandMemberRequest__Output } from '../../ember/v1/SRandMemberRequest'; +import type { SRemRequest as _ember_v1_SRemRequest, SRemRequest__Output as _ember_v1_SRemRequest__Output } from '../../ember/v1/SRemRequest'; +import type { SScanRequest as _ember_v1_SScanRequest, SScanRequest__Output as _ember_v1_SScanRequest__Output } from '../../ember/v1/SScanRequest'; +import type { SScanResponse as _ember_v1_SScanResponse, SScanResponse__Output as _ember_v1_SScanResponse__Output } from '../../ember/v1/SScanResponse'; +import type { SUnionRequest as _ember_v1_SUnionRequest, SUnionRequest__Output as _ember_v1_SUnionRequest__Output } from '../../ember/v1/SUnionRequest'; +import type { SUnionStoreRequest as _ember_v1_SUnionStoreRequest, SUnionStoreRequest__Output as _ember_v1_SUnionStoreRequest__Output } from '../../ember/v1/SUnionStoreRequest'; +import type { ScanRequest as _ember_v1_ScanRequest, ScanRequest__Output as _ember_v1_ScanRequest__Output } from '../../ember/v1/ScanRequest'; +import type { ScanResponse as _ember_v1_ScanResponse, ScanResponse__Output as _ember_v1_ScanResponse__Output } from '../../ember/v1/ScanResponse'; +import type { SetRangeRequest as _ember_v1_SetRangeRequest, SetRangeRequest__Output as _ember_v1_SetRangeRequest__Output } from '../../ember/v1/SetRangeRequest'; +import type { SetRequest as _ember_v1_SetRequest, SetRequest__Output as _ember_v1_SetRequest__Output } from '../../ember/v1/SetRequest'; +import type { SetResponse as _ember_v1_SetResponse, SetResponse__Output as _ember_v1_SetResponse__Output } from '../../ember/v1/SetResponse'; +import type { SlowLogGetRequest as _ember_v1_SlowLogGetRequest, SlowLogGetRequest__Output as _ember_v1_SlowLogGetRequest__Output } from '../../ember/v1/SlowLogGetRequest'; +import type { SlowLogGetResponse as _ember_v1_SlowLogGetResponse, SlowLogGetResponse__Output as _ember_v1_SlowLogGetResponse__Output } from '../../ember/v1/SlowLogGetResponse'; +import type { SlowLogLenRequest as _ember_v1_SlowLogLenRequest, SlowLogLenRequest__Output as _ember_v1_SlowLogLenRequest__Output } from '../../ember/v1/SlowLogLenRequest'; +import type { SlowLogResetRequest as _ember_v1_SlowLogResetRequest, SlowLogResetRequest__Output as _ember_v1_SlowLogResetRequest__Output } from '../../ember/v1/SlowLogResetRequest'; +import type { StatusResponse as _ember_v1_StatusResponse, StatusResponse__Output as _ember_v1_StatusResponse__Output } from '../../ember/v1/StatusResponse'; +import type { StrlenRequest as _ember_v1_StrlenRequest, StrlenRequest__Output as _ember_v1_StrlenRequest__Output } from '../../ember/v1/StrlenRequest'; +import type { SubscribeEvent as _ember_v1_SubscribeEvent, SubscribeEvent__Output as _ember_v1_SubscribeEvent__Output } from '../../ember/v1/SubscribeEvent'; +import type { SubscribeRequest as _ember_v1_SubscribeRequest, SubscribeRequest__Output as _ember_v1_SubscribeRequest__Output } from '../../ember/v1/SubscribeRequest'; +import type { TimeRequest as _ember_v1_TimeRequest, TimeRequest__Output as _ember_v1_TimeRequest__Output } from '../../ember/v1/TimeRequest'; +import type { TimeResponse as _ember_v1_TimeResponse, TimeResponse__Output as _ember_v1_TimeResponse__Output } from '../../ember/v1/TimeResponse'; +import type { TouchRequest as _ember_v1_TouchRequest, TouchRequest__Output as _ember_v1_TouchRequest__Output } from '../../ember/v1/TouchRequest'; +import type { TtlRequest as _ember_v1_TtlRequest, TtlRequest__Output as _ember_v1_TtlRequest__Output } from '../../ember/v1/TtlRequest'; +import type { TtlResponse as _ember_v1_TtlResponse, TtlResponse__Output as _ember_v1_TtlResponse__Output } from '../../ember/v1/TtlResponse'; +import type { TypeRequest as _ember_v1_TypeRequest, TypeRequest__Output as _ember_v1_TypeRequest__Output } from '../../ember/v1/TypeRequest'; +import type { TypeResponse as _ember_v1_TypeResponse, TypeResponse__Output as _ember_v1_TypeResponse__Output } from '../../ember/v1/TypeResponse'; +import type { UnlinkRequest as _ember_v1_UnlinkRequest, UnlinkRequest__Output as _ember_v1_UnlinkRequest__Output } from '../../ember/v1/UnlinkRequest'; +import type { VAddBatchRequest as _ember_v1_VAddBatchRequest, VAddBatchRequest__Output as _ember_v1_VAddBatchRequest__Output } from '../../ember/v1/VAddBatchRequest'; +import type { VAddRequest as _ember_v1_VAddRequest, VAddRequest__Output as _ember_v1_VAddRequest__Output } from '../../ember/v1/VAddRequest'; +import type { VCardRequest as _ember_v1_VCardRequest, VCardRequest__Output as _ember_v1_VCardRequest__Output } from '../../ember/v1/VCardRequest'; +import type { VDimRequest as _ember_v1_VDimRequest, VDimRequest__Output as _ember_v1_VDimRequest__Output } from '../../ember/v1/VDimRequest'; +import type { VGetRequest as _ember_v1_VGetRequest, VGetRequest__Output as _ember_v1_VGetRequest__Output } from '../../ember/v1/VGetRequest'; +import type { VGetResponse as _ember_v1_VGetResponse, VGetResponse__Output as _ember_v1_VGetResponse__Output } from '../../ember/v1/VGetResponse'; +import type { VInfoRequest as _ember_v1_VInfoRequest, VInfoRequest__Output as _ember_v1_VInfoRequest__Output } from '../../ember/v1/VInfoRequest'; +import type { VInfoResponse as _ember_v1_VInfoResponse, VInfoResponse__Output as _ember_v1_VInfoResponse__Output } from '../../ember/v1/VInfoResponse'; +import type { VRemRequest as _ember_v1_VRemRequest, VRemRequest__Output as _ember_v1_VRemRequest__Output } from '../../ember/v1/VRemRequest'; +import type { VSimRequest as _ember_v1_VSimRequest, VSimRequest__Output as _ember_v1_VSimRequest__Output } from '../../ember/v1/VSimRequest'; +import type { VSimResponse as _ember_v1_VSimResponse, VSimResponse__Output as _ember_v1_VSimResponse__Output } from '../../ember/v1/VSimResponse'; +import type { ZAddRequest as _ember_v1_ZAddRequest, ZAddRequest__Output as _ember_v1_ZAddRequest__Output } from '../../ember/v1/ZAddRequest'; +import type { ZCardRequest as _ember_v1_ZCardRequest, ZCardRequest__Output as _ember_v1_ZCardRequest__Output } from '../../ember/v1/ZCardRequest'; +import type { ZCountRequest as _ember_v1_ZCountRequest, ZCountRequest__Output as _ember_v1_ZCountRequest__Output } from '../../ember/v1/ZCountRequest'; +import type { ZDiffRequest as _ember_v1_ZDiffRequest, ZDiffRequest__Output as _ember_v1_ZDiffRequest__Output } from '../../ember/v1/ZDiffRequest'; +import type { ZIncrByRequest as _ember_v1_ZIncrByRequest, ZIncrByRequest__Output as _ember_v1_ZIncrByRequest__Output } from '../../ember/v1/ZIncrByRequest'; +import type { ZInterRequest as _ember_v1_ZInterRequest, ZInterRequest__Output as _ember_v1_ZInterRequest__Output } from '../../ember/v1/ZInterRequest'; +import type { ZPopMaxRequest as _ember_v1_ZPopMaxRequest, ZPopMaxRequest__Output as _ember_v1_ZPopMaxRequest__Output } from '../../ember/v1/ZPopMaxRequest'; +import type { ZPopMinRequest as _ember_v1_ZPopMinRequest, ZPopMinRequest__Output as _ember_v1_ZPopMinRequest__Output } from '../../ember/v1/ZPopMinRequest'; +import type { ZRangeByScoreRequest as _ember_v1_ZRangeByScoreRequest, ZRangeByScoreRequest__Output as _ember_v1_ZRangeByScoreRequest__Output } from '../../ember/v1/ZRangeByScoreRequest'; +import type { ZRangeRequest as _ember_v1_ZRangeRequest, ZRangeRequest__Output as _ember_v1_ZRangeRequest__Output } from '../../ember/v1/ZRangeRequest'; +import type { ZRangeResponse as _ember_v1_ZRangeResponse, ZRangeResponse__Output as _ember_v1_ZRangeResponse__Output } from '../../ember/v1/ZRangeResponse'; +import type { ZRankRequest as _ember_v1_ZRankRequest, ZRankRequest__Output as _ember_v1_ZRankRequest__Output } from '../../ember/v1/ZRankRequest'; +import type { ZRemRequest as _ember_v1_ZRemRequest, ZRemRequest__Output as _ember_v1_ZRemRequest__Output } from '../../ember/v1/ZRemRequest'; +import type { ZRevRangeByScoreRequest as _ember_v1_ZRevRangeByScoreRequest, ZRevRangeByScoreRequest__Output as _ember_v1_ZRevRangeByScoreRequest__Output } from '../../ember/v1/ZRevRangeByScoreRequest'; +import type { ZRevRangeRequest as _ember_v1_ZRevRangeRequest, ZRevRangeRequest__Output as _ember_v1_ZRevRangeRequest__Output } from '../../ember/v1/ZRevRangeRequest'; +import type { ZRevRankRequest as _ember_v1_ZRevRankRequest, ZRevRankRequest__Output as _ember_v1_ZRevRankRequest__Output } from '../../ember/v1/ZRevRankRequest'; +import type { ZScanRequest as _ember_v1_ZScanRequest, ZScanRequest__Output as _ember_v1_ZScanRequest__Output } from '../../ember/v1/ZScanRequest'; +import type { ZScanResponse as _ember_v1_ZScanResponse, ZScanResponse__Output as _ember_v1_ZScanResponse__Output } from '../../ember/v1/ZScanResponse'; +import type { ZScoreRequest as _ember_v1_ZScoreRequest, ZScoreRequest__Output as _ember_v1_ZScoreRequest__Output } from '../../ember/v1/ZScoreRequest'; +import type { ZUnionRequest as _ember_v1_ZUnionRequest, ZUnionRequest__Output as _ember_v1_ZUnionRequest__Output } from '../../ember/v1/ZUnionRequest'; + +export interface EmberCacheDefinition { + Append: MethodDefinition<_ember_v1_AppendRequest, _ember_v1_IntResponse, _ember_v1_AppendRequest__Output, _ember_v1_IntResponse__Output> + BgRewriteAof: MethodDefinition<_ember_v1_BgRewriteAofRequest, _ember_v1_StatusResponse, _ember_v1_BgRewriteAofRequest__Output, _ember_v1_StatusResponse__Output> + BgSave: MethodDefinition<_ember_v1_BgSaveRequest, _ember_v1_StatusResponse, _ember_v1_BgSaveRequest__Output, _ember_v1_StatusResponse__Output> + Copy: MethodDefinition<_ember_v1_CopyRequest, _ember_v1_BoolResponse, _ember_v1_CopyRequest__Output, _ember_v1_BoolResponse__Output> + DbSize: MethodDefinition<_ember_v1_DbSizeRequest, _ember_v1_IntResponse, _ember_v1_DbSizeRequest__Output, _ember_v1_IntResponse__Output> + Decr: MethodDefinition<_ember_v1_DecrRequest, _ember_v1_IntResponse, _ember_v1_DecrRequest__Output, _ember_v1_IntResponse__Output> + DecrBy: MethodDefinition<_ember_v1_DecrByRequest, _ember_v1_IntResponse, _ember_v1_DecrByRequest__Output, _ember_v1_IntResponse__Output> + Del: MethodDefinition<_ember_v1_DelRequest, _ember_v1_DelResponse, _ember_v1_DelRequest__Output, _ember_v1_DelResponse__Output> + Echo: MethodDefinition<_ember_v1_EchoRequest, _ember_v1_EchoResponse, _ember_v1_EchoRequest__Output, _ember_v1_EchoResponse__Output> + Exists: MethodDefinition<_ember_v1_ExistsRequest, _ember_v1_IntResponse, _ember_v1_ExistsRequest__Output, _ember_v1_IntResponse__Output> + Expire: MethodDefinition<_ember_v1_ExpireRequest, _ember_v1_BoolResponse, _ember_v1_ExpireRequest__Output, _ember_v1_BoolResponse__Output> + FlushDb: MethodDefinition<_ember_v1_FlushDbRequest, _ember_v1_StatusResponse, _ember_v1_FlushDbRequest__Output, _ember_v1_StatusResponse__Output> + Get: MethodDefinition<_ember_v1_GetRequest, _ember_v1_GetResponse, _ember_v1_GetRequest__Output, _ember_v1_GetResponse__Output> + GetDel: MethodDefinition<_ember_v1_GetDelRequest, _ember_v1_GetResponse, _ember_v1_GetDelRequest__Output, _ember_v1_GetResponse__Output> + GetEx: MethodDefinition<_ember_v1_GetExRequest, _ember_v1_GetResponse, _ember_v1_GetExRequest__Output, _ember_v1_GetResponse__Output> + GetRange: MethodDefinition<_ember_v1_GetRangeRequest, _ember_v1_GetResponse, _ember_v1_GetRangeRequest__Output, _ember_v1_GetResponse__Output> + HDel: MethodDefinition<_ember_v1_HDelRequest, _ember_v1_IntResponse, _ember_v1_HDelRequest__Output, _ember_v1_IntResponse__Output> + HExists: MethodDefinition<_ember_v1_HExistsRequest, _ember_v1_BoolResponse, _ember_v1_HExistsRequest__Output, _ember_v1_BoolResponse__Output> + HGet: MethodDefinition<_ember_v1_HGetRequest, _ember_v1_GetResponse, _ember_v1_HGetRequest__Output, _ember_v1_GetResponse__Output> + HGetAll: MethodDefinition<_ember_v1_HGetAllRequest, _ember_v1_HashResponse, _ember_v1_HGetAllRequest__Output, _ember_v1_HashResponse__Output> + HIncrBy: MethodDefinition<_ember_v1_HIncrByRequest, _ember_v1_IntResponse, _ember_v1_HIncrByRequest__Output, _ember_v1_IntResponse__Output> + HKeys: MethodDefinition<_ember_v1_HKeysRequest, _ember_v1_KeysResponse, _ember_v1_HKeysRequest__Output, _ember_v1_KeysResponse__Output> + HLen: MethodDefinition<_ember_v1_HLenRequest, _ember_v1_IntResponse, _ember_v1_HLenRequest__Output, _ember_v1_IntResponse__Output> + HMGet: MethodDefinition<_ember_v1_HMGetRequest, _ember_v1_OptionalArrayResponse, _ember_v1_HMGetRequest__Output, _ember_v1_OptionalArrayResponse__Output> + HScan: MethodDefinition<_ember_v1_HScanRequest, _ember_v1_HScanResponse, _ember_v1_HScanRequest__Output, _ember_v1_HScanResponse__Output> + HSet: MethodDefinition<_ember_v1_HSetRequest, _ember_v1_IntResponse, _ember_v1_HSetRequest__Output, _ember_v1_IntResponse__Output> + HVals: MethodDefinition<_ember_v1_HValsRequest, _ember_v1_ArrayResponse, _ember_v1_HValsRequest__Output, _ember_v1_ArrayResponse__Output> + Incr: MethodDefinition<_ember_v1_IncrRequest, _ember_v1_IntResponse, _ember_v1_IncrRequest__Output, _ember_v1_IntResponse__Output> + IncrBy: MethodDefinition<_ember_v1_IncrByRequest, _ember_v1_IntResponse, _ember_v1_IncrByRequest__Output, _ember_v1_IntResponse__Output> + IncrByFloat: MethodDefinition<_ember_v1_IncrByFloatRequest, _ember_v1_FloatResponse, _ember_v1_IncrByFloatRequest__Output, _ember_v1_FloatResponse__Output> + Info: MethodDefinition<_ember_v1_InfoRequest, _ember_v1_InfoResponse, _ember_v1_InfoRequest__Output, _ember_v1_InfoResponse__Output> + Keys: MethodDefinition<_ember_v1_KeysRequest, _ember_v1_KeysResponse, _ember_v1_KeysRequest__Output, _ember_v1_KeysResponse__Output> + LIndex: MethodDefinition<_ember_v1_LIndexRequest, _ember_v1_GetResponse, _ember_v1_LIndexRequest__Output, _ember_v1_GetResponse__Output> + LInsert: MethodDefinition<_ember_v1_LInsertRequest, _ember_v1_IntResponse, _ember_v1_LInsertRequest__Output, _ember_v1_IntResponse__Output> + LLen: MethodDefinition<_ember_v1_LLenRequest, _ember_v1_IntResponse, _ember_v1_LLenRequest__Output, _ember_v1_IntResponse__Output> + LMove: MethodDefinition<_ember_v1_LMoveRequest, _ember_v1_GetResponse, _ember_v1_LMoveRequest__Output, _ember_v1_GetResponse__Output> + LPop: MethodDefinition<_ember_v1_LPopRequest, _ember_v1_GetResponse, _ember_v1_LPopRequest__Output, _ember_v1_GetResponse__Output> + LPos: MethodDefinition<_ember_v1_LPosRequest, _ember_v1_OptionalIntResponse, _ember_v1_LPosRequest__Output, _ember_v1_OptionalIntResponse__Output> + LPush: MethodDefinition<_ember_v1_LPushRequest, _ember_v1_IntResponse, _ember_v1_LPushRequest__Output, _ember_v1_IntResponse__Output> + LRange: MethodDefinition<_ember_v1_LRangeRequest, _ember_v1_ArrayResponse, _ember_v1_LRangeRequest__Output, _ember_v1_ArrayResponse__Output> + LRem: MethodDefinition<_ember_v1_LRemRequest, _ember_v1_IntResponse, _ember_v1_LRemRequest__Output, _ember_v1_IntResponse__Output> + LSet: MethodDefinition<_ember_v1_LSetRequest, _ember_v1_StatusResponse, _ember_v1_LSetRequest__Output, _ember_v1_StatusResponse__Output> + LTrim: MethodDefinition<_ember_v1_LTrimRequest, _ember_v1_StatusResponse, _ember_v1_LTrimRequest__Output, _ember_v1_StatusResponse__Output> + LastSave: MethodDefinition<_ember_v1_LastSaveRequest, _ember_v1_IntResponse, _ember_v1_LastSaveRequest__Output, _ember_v1_IntResponse__Output> + MGet: MethodDefinition<_ember_v1_MGetRequest, _ember_v1_MGetResponse, _ember_v1_MGetRequest__Output, _ember_v1_MGetResponse__Output> + MSet: MethodDefinition<_ember_v1_MSetRequest, _ember_v1_MSetResponse, _ember_v1_MSetRequest__Output, _ember_v1_MSetResponse__Output> + PExpire: MethodDefinition<_ember_v1_PExpireRequest, _ember_v1_BoolResponse, _ember_v1_PExpireRequest__Output, _ember_v1_BoolResponse__Output> + PTtl: MethodDefinition<_ember_v1_PTtlRequest, _ember_v1_TtlResponse, _ember_v1_PTtlRequest__Output, _ember_v1_TtlResponse__Output> + Persist: MethodDefinition<_ember_v1_PersistRequest, _ember_v1_BoolResponse, _ember_v1_PersistRequest__Output, _ember_v1_BoolResponse__Output> + Ping: MethodDefinition<_ember_v1_PingRequest, _ember_v1_PingResponse, _ember_v1_PingRequest__Output, _ember_v1_PingResponse__Output> + Pipeline: MethodDefinition<_ember_v1_PipelineRequest, _ember_v1_PipelineResponse, _ember_v1_PipelineRequest__Output, _ember_v1_PipelineResponse__Output> + PubSubChannels: MethodDefinition<_ember_v1_PubSubChannelsRequest, _ember_v1_KeysResponse, _ember_v1_PubSubChannelsRequest__Output, _ember_v1_KeysResponse__Output> + PubSubNumPat: MethodDefinition<_ember_v1_PubSubNumPatRequest, _ember_v1_IntResponse, _ember_v1_PubSubNumPatRequest__Output, _ember_v1_IntResponse__Output> + PubSubNumSub: MethodDefinition<_ember_v1_PubSubNumSubRequest, _ember_v1_PubSubNumSubResponse, _ember_v1_PubSubNumSubRequest__Output, _ember_v1_PubSubNumSubResponse__Output> + Publish: MethodDefinition<_ember_v1_PublishRequest, _ember_v1_IntResponse, _ember_v1_PublishRequest__Output, _ember_v1_IntResponse__Output> + RPop: MethodDefinition<_ember_v1_RPopRequest, _ember_v1_GetResponse, _ember_v1_RPopRequest__Output, _ember_v1_GetResponse__Output> + RPush: MethodDefinition<_ember_v1_RPushRequest, _ember_v1_IntResponse, _ember_v1_RPushRequest__Output, _ember_v1_IntResponse__Output> + RandomKey: MethodDefinition<_ember_v1_RandomKeyRequest, _ember_v1_GetResponse, _ember_v1_RandomKeyRequest__Output, _ember_v1_GetResponse__Output> + Rename: MethodDefinition<_ember_v1_RenameRequest, _ember_v1_StatusResponse, _ember_v1_RenameRequest__Output, _ember_v1_StatusResponse__Output> + SAdd: MethodDefinition<_ember_v1_SAddRequest, _ember_v1_IntResponse, _ember_v1_SAddRequest__Output, _ember_v1_IntResponse__Output> + SCard: MethodDefinition<_ember_v1_SCardRequest, _ember_v1_IntResponse, _ember_v1_SCardRequest__Output, _ember_v1_IntResponse__Output> + SDiff: MethodDefinition<_ember_v1_SDiffRequest, _ember_v1_KeysResponse, _ember_v1_SDiffRequest__Output, _ember_v1_KeysResponse__Output> + SDiffStore: MethodDefinition<_ember_v1_SDiffStoreRequest, _ember_v1_IntResponse, _ember_v1_SDiffStoreRequest__Output, _ember_v1_IntResponse__Output> + SInter: MethodDefinition<_ember_v1_SInterRequest, _ember_v1_KeysResponse, _ember_v1_SInterRequest__Output, _ember_v1_KeysResponse__Output> + SInterStore: MethodDefinition<_ember_v1_SInterStoreRequest, _ember_v1_IntResponse, _ember_v1_SInterStoreRequest__Output, _ember_v1_IntResponse__Output> + SIsMember: MethodDefinition<_ember_v1_SIsMemberRequest, _ember_v1_BoolResponse, _ember_v1_SIsMemberRequest__Output, _ember_v1_BoolResponse__Output> + SMembers: MethodDefinition<_ember_v1_SMembersRequest, _ember_v1_KeysResponse, _ember_v1_SMembersRequest__Output, _ember_v1_KeysResponse__Output> + SMisMember: MethodDefinition<_ember_v1_SMisMemberRequest, _ember_v1_BoolArrayResponse, _ember_v1_SMisMemberRequest__Output, _ember_v1_BoolArrayResponse__Output> + SPop: MethodDefinition<_ember_v1_SPopRequest, _ember_v1_ArrayResponse, _ember_v1_SPopRequest__Output, _ember_v1_ArrayResponse__Output> + SRandMember: MethodDefinition<_ember_v1_SRandMemberRequest, _ember_v1_ArrayResponse, _ember_v1_SRandMemberRequest__Output, _ember_v1_ArrayResponse__Output> + SRem: MethodDefinition<_ember_v1_SRemRequest, _ember_v1_IntResponse, _ember_v1_SRemRequest__Output, _ember_v1_IntResponse__Output> + SScan: MethodDefinition<_ember_v1_SScanRequest, _ember_v1_SScanResponse, _ember_v1_SScanRequest__Output, _ember_v1_SScanResponse__Output> + SUnion: MethodDefinition<_ember_v1_SUnionRequest, _ember_v1_KeysResponse, _ember_v1_SUnionRequest__Output, _ember_v1_KeysResponse__Output> + SUnionStore: MethodDefinition<_ember_v1_SUnionStoreRequest, _ember_v1_IntResponse, _ember_v1_SUnionStoreRequest__Output, _ember_v1_IntResponse__Output> + Scan: MethodDefinition<_ember_v1_ScanRequest, _ember_v1_ScanResponse, _ember_v1_ScanRequest__Output, _ember_v1_ScanResponse__Output> + Set: MethodDefinition<_ember_v1_SetRequest, _ember_v1_SetResponse, _ember_v1_SetRequest__Output, _ember_v1_SetResponse__Output> + SetRange: MethodDefinition<_ember_v1_SetRangeRequest, _ember_v1_IntResponse, _ember_v1_SetRangeRequest__Output, _ember_v1_IntResponse__Output> + SlowLogGet: MethodDefinition<_ember_v1_SlowLogGetRequest, _ember_v1_SlowLogGetResponse, _ember_v1_SlowLogGetRequest__Output, _ember_v1_SlowLogGetResponse__Output> + SlowLogLen: MethodDefinition<_ember_v1_SlowLogLenRequest, _ember_v1_IntResponse, _ember_v1_SlowLogLenRequest__Output, _ember_v1_IntResponse__Output> + SlowLogReset: MethodDefinition<_ember_v1_SlowLogResetRequest, _ember_v1_StatusResponse, _ember_v1_SlowLogResetRequest__Output, _ember_v1_StatusResponse__Output> + Strlen: MethodDefinition<_ember_v1_StrlenRequest, _ember_v1_IntResponse, _ember_v1_StrlenRequest__Output, _ember_v1_IntResponse__Output> + Subscribe: MethodDefinition<_ember_v1_SubscribeRequest, _ember_v1_SubscribeEvent, _ember_v1_SubscribeRequest__Output, _ember_v1_SubscribeEvent__Output> + Time: MethodDefinition<_ember_v1_TimeRequest, _ember_v1_TimeResponse, _ember_v1_TimeRequest__Output, _ember_v1_TimeResponse__Output> + Touch: MethodDefinition<_ember_v1_TouchRequest, _ember_v1_IntResponse, _ember_v1_TouchRequest__Output, _ember_v1_IntResponse__Output> + Ttl: MethodDefinition<_ember_v1_TtlRequest, _ember_v1_TtlResponse, _ember_v1_TtlRequest__Output, _ember_v1_TtlResponse__Output> + Type: MethodDefinition<_ember_v1_TypeRequest, _ember_v1_TypeResponse, _ember_v1_TypeRequest__Output, _ember_v1_TypeResponse__Output> + Unlink: MethodDefinition<_ember_v1_UnlinkRequest, _ember_v1_DelResponse, _ember_v1_UnlinkRequest__Output, _ember_v1_DelResponse__Output> + VAdd: MethodDefinition<_ember_v1_VAddRequest, _ember_v1_BoolResponse, _ember_v1_VAddRequest__Output, _ember_v1_BoolResponse__Output> + VAddBatch: MethodDefinition<_ember_v1_VAddBatchRequest, _ember_v1_IntResponse, _ember_v1_VAddBatchRequest__Output, _ember_v1_IntResponse__Output> + VCard: MethodDefinition<_ember_v1_VCardRequest, _ember_v1_IntResponse, _ember_v1_VCardRequest__Output, _ember_v1_IntResponse__Output> + VDim: MethodDefinition<_ember_v1_VDimRequest, _ember_v1_IntResponse, _ember_v1_VDimRequest__Output, _ember_v1_IntResponse__Output> + VGet: MethodDefinition<_ember_v1_VGetRequest, _ember_v1_VGetResponse, _ember_v1_VGetRequest__Output, _ember_v1_VGetResponse__Output> + VInfo: MethodDefinition<_ember_v1_VInfoRequest, _ember_v1_VInfoResponse, _ember_v1_VInfoRequest__Output, _ember_v1_VInfoResponse__Output> + VRem: MethodDefinition<_ember_v1_VRemRequest, _ember_v1_BoolResponse, _ember_v1_VRemRequest__Output, _ember_v1_BoolResponse__Output> + VSim: MethodDefinition<_ember_v1_VSimRequest, _ember_v1_VSimResponse, _ember_v1_VSimRequest__Output, _ember_v1_VSimResponse__Output> + ZAdd: MethodDefinition<_ember_v1_ZAddRequest, _ember_v1_IntResponse, _ember_v1_ZAddRequest__Output, _ember_v1_IntResponse__Output> + ZCard: MethodDefinition<_ember_v1_ZCardRequest, _ember_v1_IntResponse, _ember_v1_ZCardRequest__Output, _ember_v1_IntResponse__Output> + ZCount: MethodDefinition<_ember_v1_ZCountRequest, _ember_v1_IntResponse, _ember_v1_ZCountRequest__Output, _ember_v1_IntResponse__Output> + ZDiff: MethodDefinition<_ember_v1_ZDiffRequest, _ember_v1_ZRangeResponse, _ember_v1_ZDiffRequest__Output, _ember_v1_ZRangeResponse__Output> + ZIncrBy: MethodDefinition<_ember_v1_ZIncrByRequest, _ember_v1_FloatResponse, _ember_v1_ZIncrByRequest__Output, _ember_v1_FloatResponse__Output> + ZInter: MethodDefinition<_ember_v1_ZInterRequest, _ember_v1_ZRangeResponse, _ember_v1_ZInterRequest__Output, _ember_v1_ZRangeResponse__Output> + ZPopMax: MethodDefinition<_ember_v1_ZPopMaxRequest, _ember_v1_ZRangeResponse, _ember_v1_ZPopMaxRequest__Output, _ember_v1_ZRangeResponse__Output> + ZPopMin: MethodDefinition<_ember_v1_ZPopMinRequest, _ember_v1_ZRangeResponse, _ember_v1_ZPopMinRequest__Output, _ember_v1_ZRangeResponse__Output> + ZRange: MethodDefinition<_ember_v1_ZRangeRequest, _ember_v1_ZRangeResponse, _ember_v1_ZRangeRequest__Output, _ember_v1_ZRangeResponse__Output> + ZRangeByScore: MethodDefinition<_ember_v1_ZRangeByScoreRequest, _ember_v1_ZRangeResponse, _ember_v1_ZRangeByScoreRequest__Output, _ember_v1_ZRangeResponse__Output> + ZRank: MethodDefinition<_ember_v1_ZRankRequest, _ember_v1_OptionalIntResponse, _ember_v1_ZRankRequest__Output, _ember_v1_OptionalIntResponse__Output> + ZRem: MethodDefinition<_ember_v1_ZRemRequest, _ember_v1_IntResponse, _ember_v1_ZRemRequest__Output, _ember_v1_IntResponse__Output> + ZRevRange: MethodDefinition<_ember_v1_ZRevRangeRequest, _ember_v1_ZRangeResponse, _ember_v1_ZRevRangeRequest__Output, _ember_v1_ZRangeResponse__Output> + ZRevRangeByScore: MethodDefinition<_ember_v1_ZRevRangeByScoreRequest, _ember_v1_ZRangeResponse, _ember_v1_ZRevRangeByScoreRequest__Output, _ember_v1_ZRangeResponse__Output> + ZRevRank: MethodDefinition<_ember_v1_ZRevRankRequest, _ember_v1_OptionalIntResponse, _ember_v1_ZRevRankRequest__Output, _ember_v1_OptionalIntResponse__Output> + ZScan: MethodDefinition<_ember_v1_ZScanRequest, _ember_v1_ZScanResponse, _ember_v1_ZScanRequest__Output, _ember_v1_ZScanResponse__Output> + ZScore: MethodDefinition<_ember_v1_ZScoreRequest, _ember_v1_OptionalFloatResponse, _ember_v1_ZScoreRequest__Output, _ember_v1_OptionalFloatResponse__Output> + ZUnion: MethodDefinition<_ember_v1_ZUnionRequest, _ember_v1_ZRangeResponse, _ember_v1_ZUnionRequest__Output, _ember_v1_ZRangeResponse__Output> +} diff --git a/clients/ember-ts/src/generated/ember/v1/ErrorKind.ts b/clients/ember-ts/src/generated/ember/v1/ErrorKind.ts new file mode 100644 index 00000000..876ca467 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ErrorKind.ts @@ -0,0 +1,23 @@ +// Original file: ../../proto/ember/v1/ember.proto + +export const ErrorKind = { + ERROR_KIND_UNSPECIFIED: 0, + ERROR_KIND_WRONG_TYPE: 1, + ERROR_KIND_OUT_OF_MEMORY: 2, + ERROR_KIND_INTERNAL: 3, + ERROR_KIND_INVALID_ARGUMENT: 4, +} as const; + +export type ErrorKind = + | 'ERROR_KIND_UNSPECIFIED' + | 0 + | 'ERROR_KIND_WRONG_TYPE' + | 1 + | 'ERROR_KIND_OUT_OF_MEMORY' + | 2 + | 'ERROR_KIND_INTERNAL' + | 3 + | 'ERROR_KIND_INVALID_ARGUMENT' + | 4 + +export type ErrorKind__Output = typeof ErrorKind[keyof typeof ErrorKind] diff --git a/clients/ember-ts/src/generated/ember/v1/ErrorResponse.ts b/clients/ember-ts/src/generated/ember/v1/ErrorResponse.ts new file mode 100644 index 00000000..a8a8ccf4 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ErrorResponse.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { ErrorKind as _ember_v1_ErrorKind, ErrorKind__Output as _ember_v1_ErrorKind__Output } from '../../ember/v1/ErrorKind'; + +export interface ErrorResponse { + 'message'?: (string); + 'kind'?: (_ember_v1_ErrorKind); +} + +export interface ErrorResponse__Output { + 'message'?: (string); + 'kind'?: (_ember_v1_ErrorKind__Output); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ExistsRequest.ts b/clients/ember-ts/src/generated/ember/v1/ExistsRequest.ts new file mode 100644 index 00000000..a378a377 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ExistsRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ExistsRequest { + 'keys'?: (string)[]; +} + +export interface ExistsRequest__Output { + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/ExpireRequest.ts b/clients/ember-ts/src/generated/ember/v1/ExpireRequest.ts new file mode 100644 index 00000000..81ac6c9a --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ExpireRequest.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface ExpireRequest { + 'key'?: (string); + 'seconds'?: (number | string | Long); +} + +export interface ExpireRequest__Output { + 'key'?: (string); + 'seconds'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/FieldValue.ts b/clients/ember-ts/src/generated/ember/v1/FieldValue.ts new file mode 100644 index 00000000..0d3b2a96 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/FieldValue.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface FieldValue { + 'field'?: (string); + 'value'?: (Buffer | Uint8Array | string); +} + +export interface FieldValue__Output { + 'field'?: (string); + 'value'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/FloatResponse.ts b/clients/ember-ts/src/generated/ember/v1/FloatResponse.ts new file mode 100644 index 00000000..18306548 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/FloatResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface FloatResponse { + 'value'?: (string); +} + +export interface FloatResponse__Output { + 'value'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/FlushDbRequest.ts b/clients/ember-ts/src/generated/ember/v1/FlushDbRequest.ts new file mode 100644 index 00000000..1d3f399d --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/FlushDbRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface FlushDbRequest { + 'async'?: (boolean); +} + +export interface FlushDbRequest__Output { + 'async'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/GetDelRequest.ts b/clients/ember-ts/src/generated/ember/v1/GetDelRequest.ts new file mode 100644 index 00000000..94ea765f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/GetDelRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface GetDelRequest { + 'key'?: (string); +} + +export interface GetDelRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/GetExRequest.ts b/clients/ember-ts/src/generated/ember/v1/GetExRequest.ts new file mode 100644 index 00000000..4f75a2d9 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/GetExRequest.ts @@ -0,0 +1,17 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface GetExRequest { + 'key'?: (string); + 'expireSeconds'?: (number | string | Long); + 'expireMillis'?: (number | string | Long); + 'persist'?: (boolean); +} + +export interface GetExRequest__Output { + 'key'?: (string); + 'expireSeconds'?: (Long); + 'expireMillis'?: (Long); + 'persist'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/GetRangeRequest.ts b/clients/ember-ts/src/generated/ember/v1/GetRangeRequest.ts new file mode 100644 index 00000000..8fb5eb96 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/GetRangeRequest.ts @@ -0,0 +1,15 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface GetRangeRequest { + 'key'?: (string); + 'start'?: (number | string | Long); + 'end'?: (number | string | Long); +} + +export interface GetRangeRequest__Output { + 'key'?: (string); + 'start'?: (Long); + 'end'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/GetRequest.ts b/clients/ember-ts/src/generated/ember/v1/GetRequest.ts new file mode 100644 index 00000000..4eb10b60 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/GetRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface GetRequest { + 'key'?: (string); +} + +export interface GetRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/GetResponse.ts b/clients/ember-ts/src/generated/ember/v1/GetResponse.ts new file mode 100644 index 00000000..3a4dc4da --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/GetResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface GetResponse { + 'value'?: (Buffer | Uint8Array | string); + '_value'?: "value"; +} + +export interface GetResponse__Output { + 'value'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/HDelRequest.ts b/clients/ember-ts/src/generated/ember/v1/HDelRequest.ts new file mode 100644 index 00000000..9d965d84 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HDelRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface HDelRequest { + 'key'?: (string); + 'fields'?: (string)[]; +} + +export interface HDelRequest__Output { + 'key'?: (string); + 'fields'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/HExistsRequest.ts b/clients/ember-ts/src/generated/ember/v1/HExistsRequest.ts new file mode 100644 index 00000000..6a4d3d45 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HExistsRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface HExistsRequest { + 'key'?: (string); + 'field'?: (string); +} + +export interface HExistsRequest__Output { + 'key'?: (string); + 'field'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/HGetAllRequest.ts b/clients/ember-ts/src/generated/ember/v1/HGetAllRequest.ts new file mode 100644 index 00000000..574d83b1 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HGetAllRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface HGetAllRequest { + 'key'?: (string); +} + +export interface HGetAllRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/HGetRequest.ts b/clients/ember-ts/src/generated/ember/v1/HGetRequest.ts new file mode 100644 index 00000000..75d43b44 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HGetRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface HGetRequest { + 'key'?: (string); + 'field'?: (string); +} + +export interface HGetRequest__Output { + 'key'?: (string); + 'field'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/HIncrByRequest.ts b/clients/ember-ts/src/generated/ember/v1/HIncrByRequest.ts new file mode 100644 index 00000000..cea6dcfb --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HIncrByRequest.ts @@ -0,0 +1,15 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface HIncrByRequest { + 'key'?: (string); + 'field'?: (string); + 'delta'?: (number | string | Long); +} + +export interface HIncrByRequest__Output { + 'key'?: (string); + 'field'?: (string); + 'delta'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/HKeysRequest.ts b/clients/ember-ts/src/generated/ember/v1/HKeysRequest.ts new file mode 100644 index 00000000..441d4f3b --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HKeysRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface HKeysRequest { + 'key'?: (string); +} + +export interface HKeysRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/HLenRequest.ts b/clients/ember-ts/src/generated/ember/v1/HLenRequest.ts new file mode 100644 index 00000000..20d4cf6b --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HLenRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface HLenRequest { + 'key'?: (string); +} + +export interface HLenRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/HMGetRequest.ts b/clients/ember-ts/src/generated/ember/v1/HMGetRequest.ts new file mode 100644 index 00000000..0bfab986 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HMGetRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface HMGetRequest { + 'key'?: (string); + 'fields'?: (string)[]; +} + +export interface HMGetRequest__Output { + 'key'?: (string); + 'fields'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/HScanRequest.ts b/clients/ember-ts/src/generated/ember/v1/HScanRequest.ts new file mode 100644 index 00000000..f5c97df9 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HScanRequest.ts @@ -0,0 +1,18 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface HScanRequest { + 'key'?: (string); + 'cursor'?: (number | string | Long); + 'pattern'?: (string); + 'count'?: (number); + '_pattern'?: "pattern"; +} + +export interface HScanRequest__Output { + 'key'?: (string); + 'cursor'?: (Long); + 'pattern'?: (string); + 'count'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/HScanResponse.ts b/clients/ember-ts/src/generated/ember/v1/HScanResponse.ts new file mode 100644 index 00000000..b5269450 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HScanResponse.ts @@ -0,0 +1,14 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { FieldValue as _ember_v1_FieldValue, FieldValue__Output as _ember_v1_FieldValue__Output } from '../../ember/v1/FieldValue'; +import type { Long } from '@grpc/proto-loader'; + +export interface HScanResponse { + 'cursor'?: (number | string | Long); + 'fields'?: (_ember_v1_FieldValue)[]; +} + +export interface HScanResponse__Output { + 'cursor'?: (Long); + 'fields'?: (_ember_v1_FieldValue__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/HSetRequest.ts b/clients/ember-ts/src/generated/ember/v1/HSetRequest.ts new file mode 100644 index 00000000..28f78eee --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HSetRequest.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { FieldValue as _ember_v1_FieldValue, FieldValue__Output as _ember_v1_FieldValue__Output } from '../../ember/v1/FieldValue'; + +export interface HSetRequest { + 'key'?: (string); + 'fields'?: (_ember_v1_FieldValue)[]; +} + +export interface HSetRequest__Output { + 'key'?: (string); + 'fields'?: (_ember_v1_FieldValue__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/HValsRequest.ts b/clients/ember-ts/src/generated/ember/v1/HValsRequest.ts new file mode 100644 index 00000000..f856f6ca --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HValsRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface HValsRequest { + 'key'?: (string); +} + +export interface HValsRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/HashResponse.ts b/clients/ember-ts/src/generated/ember/v1/HashResponse.ts new file mode 100644 index 00000000..18de74e3 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/HashResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { FieldValue as _ember_v1_FieldValue, FieldValue__Output as _ember_v1_FieldValue__Output } from '../../ember/v1/FieldValue'; + +export interface HashResponse { + 'fields'?: (_ember_v1_FieldValue)[]; +} + +export interface HashResponse__Output { + 'fields'?: (_ember_v1_FieldValue__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/IncrByFloatRequest.ts b/clients/ember-ts/src/generated/ember/v1/IncrByFloatRequest.ts new file mode 100644 index 00000000..01367285 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/IncrByFloatRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface IncrByFloatRequest { + 'key'?: (string); + 'delta'?: (number | string); +} + +export interface IncrByFloatRequest__Output { + 'key'?: (string); + 'delta'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/IncrByRequest.ts b/clients/ember-ts/src/generated/ember/v1/IncrByRequest.ts new file mode 100644 index 00000000..25b24a6a --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/IncrByRequest.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface IncrByRequest { + 'key'?: (string); + 'delta'?: (number | string | Long); +} + +export interface IncrByRequest__Output { + 'key'?: (string); + 'delta'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/IncrRequest.ts b/clients/ember-ts/src/generated/ember/v1/IncrRequest.ts new file mode 100644 index 00000000..3dafa114 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/IncrRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface IncrRequest { + 'key'?: (string); +} + +export interface IncrRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/InfoRequest.ts b/clients/ember-ts/src/generated/ember/v1/InfoRequest.ts new file mode 100644 index 00000000..49cecd20 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/InfoRequest.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface InfoRequest { + 'section'?: (string); + '_section'?: "section"; +} + +export interface InfoRequest__Output { + 'section'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/InfoResponse.ts b/clients/ember-ts/src/generated/ember/v1/InfoResponse.ts new file mode 100644 index 00000000..fd088d2b --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/InfoResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface InfoResponse { + 'info'?: (string); +} + +export interface InfoResponse__Output { + 'info'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/IntResponse.ts b/clients/ember-ts/src/generated/ember/v1/IntResponse.ts new file mode 100644 index 00000000..0cccfcac --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/IntResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface IntResponse { + 'value'?: (number | string | Long); +} + +export interface IntResponse__Output { + 'value'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/KeyValue.ts b/clients/ember-ts/src/generated/ember/v1/KeyValue.ts new file mode 100644 index 00000000..be699f9c --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/KeyValue.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface KeyValue { + 'key'?: (string); + 'value'?: (Buffer | Uint8Array | string); +} + +export interface KeyValue__Output { + 'key'?: (string); + 'value'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/KeysRequest.ts b/clients/ember-ts/src/generated/ember/v1/KeysRequest.ts new file mode 100644 index 00000000..3d37aa1e --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/KeysRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface KeysRequest { + 'pattern'?: (string); +} + +export interface KeysRequest__Output { + 'pattern'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/KeysResponse.ts b/clients/ember-ts/src/generated/ember/v1/KeysResponse.ts new file mode 100644 index 00000000..e0a03e79 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/KeysResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface KeysResponse { + 'keys'?: (string)[]; +} + +export interface KeysResponse__Output { + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/LIndexRequest.ts b/clients/ember-ts/src/generated/ember/v1/LIndexRequest.ts new file mode 100644 index 00000000..b2e2846d --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LIndexRequest.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface LIndexRequest { + 'key'?: (string); + 'index'?: (number | string | Long); +} + +export interface LIndexRequest__Output { + 'key'?: (string); + 'index'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LInsertRequest.ts b/clients/ember-ts/src/generated/ember/v1/LInsertRequest.ts new file mode 100644 index 00000000..9490d4f8 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LInsertRequest.ts @@ -0,0 +1,16 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface LInsertRequest { + 'key'?: (string); + 'before'?: (boolean); + 'pivot'?: (Buffer | Uint8Array | string); + 'value'?: (Buffer | Uint8Array | string); +} + +export interface LInsertRequest__Output { + 'key'?: (string); + 'before'?: (boolean); + 'pivot'?: (Buffer); + 'value'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LLenRequest.ts b/clients/ember-ts/src/generated/ember/v1/LLenRequest.ts new file mode 100644 index 00000000..b21e8ec9 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LLenRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface LLenRequest { + 'key'?: (string); +} + +export interface LLenRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LMoveRequest.ts b/clients/ember-ts/src/generated/ember/v1/LMoveRequest.ts new file mode 100644 index 00000000..ccd20176 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LMoveRequest.ts @@ -0,0 +1,16 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface LMoveRequest { + 'source'?: (string); + 'destination'?: (string); + 'srcLeft'?: (boolean); + 'dstLeft'?: (boolean); +} + +export interface LMoveRequest__Output { + 'source'?: (string); + 'destination'?: (string); + 'srcLeft'?: (boolean); + 'dstLeft'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LPopRequest.ts b/clients/ember-ts/src/generated/ember/v1/LPopRequest.ts new file mode 100644 index 00000000..26296d5e --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LPopRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface LPopRequest { + 'key'?: (string); +} + +export interface LPopRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LPosRequest.ts b/clients/ember-ts/src/generated/ember/v1/LPosRequest.ts new file mode 100644 index 00000000..14936ccb --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LPosRequest.ts @@ -0,0 +1,15 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface LPosRequest { + 'key'?: (string); + 'value'?: (Buffer | Uint8Array | string); + 'count'?: (number); + '_count'?: "count"; +} + +export interface LPosRequest__Output { + 'key'?: (string); + 'value'?: (Buffer); + 'count'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LPushRequest.ts b/clients/ember-ts/src/generated/ember/v1/LPushRequest.ts new file mode 100644 index 00000000..5ba2132d --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LPushRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface LPushRequest { + 'key'?: (string); + 'values'?: (Buffer | Uint8Array | string)[]; +} + +export interface LPushRequest__Output { + 'key'?: (string); + 'values'?: (Buffer)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/LRangeRequest.ts b/clients/ember-ts/src/generated/ember/v1/LRangeRequest.ts new file mode 100644 index 00000000..0d7b4631 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LRangeRequest.ts @@ -0,0 +1,15 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface LRangeRequest { + 'key'?: (string); + 'start'?: (number | string | Long); + 'stop'?: (number | string | Long); +} + +export interface LRangeRequest__Output { + 'key'?: (string); + 'start'?: (Long); + 'stop'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LRemRequest.ts b/clients/ember-ts/src/generated/ember/v1/LRemRequest.ts new file mode 100644 index 00000000..bbfd09d4 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LRemRequest.ts @@ -0,0 +1,15 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface LRemRequest { + 'key'?: (string); + 'count'?: (number | string | Long); + 'value'?: (Buffer | Uint8Array | string); +} + +export interface LRemRequest__Output { + 'key'?: (string); + 'count'?: (Long); + 'value'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LSetRequest.ts b/clients/ember-ts/src/generated/ember/v1/LSetRequest.ts new file mode 100644 index 00000000..4cd32875 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LSetRequest.ts @@ -0,0 +1,15 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface LSetRequest { + 'key'?: (string); + 'index'?: (number | string | Long); + 'value'?: (Buffer | Uint8Array | string); +} + +export interface LSetRequest__Output { + 'key'?: (string); + 'index'?: (Long); + 'value'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LTrimRequest.ts b/clients/ember-ts/src/generated/ember/v1/LTrimRequest.ts new file mode 100644 index 00000000..64c88ff2 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LTrimRequest.ts @@ -0,0 +1,15 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface LTrimRequest { + 'key'?: (string); + 'start'?: (number | string | Long); + 'stop'?: (number | string | Long); +} + +export interface LTrimRequest__Output { + 'key'?: (string); + 'start'?: (Long); + 'stop'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/LastSaveRequest.ts b/clients/ember-ts/src/generated/ember/v1/LastSaveRequest.ts new file mode 100644 index 00000000..ddacefa9 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/LastSaveRequest.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface LastSaveRequest { +} + +export interface LastSaveRequest__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/MGetRequest.ts b/clients/ember-ts/src/generated/ember/v1/MGetRequest.ts new file mode 100644 index 00000000..16547f41 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/MGetRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface MGetRequest { + 'keys'?: (string)[]; +} + +export interface MGetRequest__Output { + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/MGetResponse.ts b/clients/ember-ts/src/generated/ember/v1/MGetResponse.ts new file mode 100644 index 00000000..d975ca1e --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/MGetResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { OptionalValue as _ember_v1_OptionalValue, OptionalValue__Output as _ember_v1_OptionalValue__Output } from '../../ember/v1/OptionalValue'; + +export interface MGetResponse { + 'values'?: (_ember_v1_OptionalValue)[]; +} + +export interface MGetResponse__Output { + 'values'?: (_ember_v1_OptionalValue__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/MSetRequest.ts b/clients/ember-ts/src/generated/ember/v1/MSetRequest.ts new file mode 100644 index 00000000..81d60bd2 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/MSetRequest.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { KeyValue as _ember_v1_KeyValue, KeyValue__Output as _ember_v1_KeyValue__Output } from '../../ember/v1/KeyValue'; + +export interface MSetRequest { + 'pairs'?: (_ember_v1_KeyValue)[]; +} + +export interface MSetRequest__Output { + 'pairs'?: (_ember_v1_KeyValue__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/MSetResponse.ts b/clients/ember-ts/src/generated/ember/v1/MSetResponse.ts new file mode 100644 index 00000000..4016068b --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/MSetResponse.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface MSetResponse { +} + +export interface MSetResponse__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/OptionalArrayResponse.ts b/clients/ember-ts/src/generated/ember/v1/OptionalArrayResponse.ts new file mode 100644 index 00000000..cdcf742f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/OptionalArrayResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { OptionalValue as _ember_v1_OptionalValue, OptionalValue__Output as _ember_v1_OptionalValue__Output } from '../../ember/v1/OptionalValue'; + +export interface OptionalArrayResponse { + 'values'?: (_ember_v1_OptionalValue)[]; +} + +export interface OptionalArrayResponse__Output { + 'values'?: (_ember_v1_OptionalValue__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/OptionalFloatResponse.ts b/clients/ember-ts/src/generated/ember/v1/OptionalFloatResponse.ts new file mode 100644 index 00000000..b7062ec1 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/OptionalFloatResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface OptionalFloatResponse { + 'value'?: (number | string); + '_value'?: "value"; +} + +export interface OptionalFloatResponse__Output { + 'value'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/OptionalIntResponse.ts b/clients/ember-ts/src/generated/ember/v1/OptionalIntResponse.ts new file mode 100644 index 00000000..90384dc3 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/OptionalIntResponse.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface OptionalIntResponse { + 'value'?: (number | string | Long); + '_value'?: "value"; +} + +export interface OptionalIntResponse__Output { + 'value'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/OptionalValue.ts b/clients/ember-ts/src/generated/ember/v1/OptionalValue.ts new file mode 100644 index 00000000..653d3308 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/OptionalValue.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface OptionalValue { + 'value'?: (Buffer | Uint8Array | string); + '_value'?: "value"; +} + +export interface OptionalValue__Output { + 'value'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/PExpireRequest.ts b/clients/ember-ts/src/generated/ember/v1/PExpireRequest.ts new file mode 100644 index 00000000..2525a72d --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PExpireRequest.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface PExpireRequest { + 'key'?: (string); + 'milliseconds'?: (number | string | Long); +} + +export interface PExpireRequest__Output { + 'key'?: (string); + 'milliseconds'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/PTtlRequest.ts b/clients/ember-ts/src/generated/ember/v1/PTtlRequest.ts new file mode 100644 index 00000000..a8b71c0a --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PTtlRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface PTtlRequest { + 'key'?: (string); +} + +export interface PTtlRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/PersistRequest.ts b/clients/ember-ts/src/generated/ember/v1/PersistRequest.ts new file mode 100644 index 00000000..3f19312c --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PersistRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface PersistRequest { + 'key'?: (string); +} + +export interface PersistRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/PingRequest.ts b/clients/ember-ts/src/generated/ember/v1/PingRequest.ts new file mode 100644 index 00000000..c36a45c8 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PingRequest.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface PingRequest { + 'message'?: (string); + '_message'?: "message"; +} + +export interface PingRequest__Output { + 'message'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/PingResponse.ts b/clients/ember-ts/src/generated/ember/v1/PingResponse.ts new file mode 100644 index 00000000..f5c33eff --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PingResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface PingResponse { + 'message'?: (string); +} + +export interface PingResponse__Output { + 'message'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/PipelineRequest.ts b/clients/ember-ts/src/generated/ember/v1/PipelineRequest.ts new file mode 100644 index 00000000..e4b9d4b4 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PipelineRequest.ts @@ -0,0 +1,342 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { GetRequest as _ember_v1_GetRequest, GetRequest__Output as _ember_v1_GetRequest__Output } from '../../ember/v1/GetRequest'; +import type { SetRequest as _ember_v1_SetRequest, SetRequest__Output as _ember_v1_SetRequest__Output } from '../../ember/v1/SetRequest'; +import type { DelRequest as _ember_v1_DelRequest, DelRequest__Output as _ember_v1_DelRequest__Output } from '../../ember/v1/DelRequest'; +import type { ExistsRequest as _ember_v1_ExistsRequest, ExistsRequest__Output as _ember_v1_ExistsRequest__Output } from '../../ember/v1/ExistsRequest'; +import type { IncrRequest as _ember_v1_IncrRequest, IncrRequest__Output as _ember_v1_IncrRequest__Output } from '../../ember/v1/IncrRequest'; +import type { IncrByRequest as _ember_v1_IncrByRequest, IncrByRequest__Output as _ember_v1_IncrByRequest__Output } from '../../ember/v1/IncrByRequest'; +import type { DecrByRequest as _ember_v1_DecrByRequest, DecrByRequest__Output as _ember_v1_DecrByRequest__Output } from '../../ember/v1/DecrByRequest'; +import type { IncrByFloatRequest as _ember_v1_IncrByFloatRequest, IncrByFloatRequest__Output as _ember_v1_IncrByFloatRequest__Output } from '../../ember/v1/IncrByFloatRequest'; +import type { AppendRequest as _ember_v1_AppendRequest, AppendRequest__Output as _ember_v1_AppendRequest__Output } from '../../ember/v1/AppendRequest'; +import type { StrlenRequest as _ember_v1_StrlenRequest, StrlenRequest__Output as _ember_v1_StrlenRequest__Output } from '../../ember/v1/StrlenRequest'; +import type { ExpireRequest as _ember_v1_ExpireRequest, ExpireRequest__Output as _ember_v1_ExpireRequest__Output } from '../../ember/v1/ExpireRequest'; +import type { PExpireRequest as _ember_v1_PExpireRequest, PExpireRequest__Output as _ember_v1_PExpireRequest__Output } from '../../ember/v1/PExpireRequest'; +import type { PersistRequest as _ember_v1_PersistRequest, PersistRequest__Output as _ember_v1_PersistRequest__Output } from '../../ember/v1/PersistRequest'; +import type { TtlRequest as _ember_v1_TtlRequest, TtlRequest__Output as _ember_v1_TtlRequest__Output } from '../../ember/v1/TtlRequest'; +import type { PTtlRequest as _ember_v1_PTtlRequest, PTtlRequest__Output as _ember_v1_PTtlRequest__Output } from '../../ember/v1/PTtlRequest'; +import type { TypeRequest as _ember_v1_TypeRequest, TypeRequest__Output as _ember_v1_TypeRequest__Output } from '../../ember/v1/TypeRequest'; +import type { LPushRequest as _ember_v1_LPushRequest, LPushRequest__Output as _ember_v1_LPushRequest__Output } from '../../ember/v1/LPushRequest'; +import type { RPushRequest as _ember_v1_RPushRequest, RPushRequest__Output as _ember_v1_RPushRequest__Output } from '../../ember/v1/RPushRequest'; +import type { LPopRequest as _ember_v1_LPopRequest, LPopRequest__Output as _ember_v1_LPopRequest__Output } from '../../ember/v1/LPopRequest'; +import type { RPopRequest as _ember_v1_RPopRequest, RPopRequest__Output as _ember_v1_RPopRequest__Output } from '../../ember/v1/RPopRequest'; +import type { LRangeRequest as _ember_v1_LRangeRequest, LRangeRequest__Output as _ember_v1_LRangeRequest__Output } from '../../ember/v1/LRangeRequest'; +import type { LLenRequest as _ember_v1_LLenRequest, LLenRequest__Output as _ember_v1_LLenRequest__Output } from '../../ember/v1/LLenRequest'; +import type { HSetRequest as _ember_v1_HSetRequest, HSetRequest__Output as _ember_v1_HSetRequest__Output } from '../../ember/v1/HSetRequest'; +import type { HGetRequest as _ember_v1_HGetRequest, HGetRequest__Output as _ember_v1_HGetRequest__Output } from '../../ember/v1/HGetRequest'; +import type { HGetAllRequest as _ember_v1_HGetAllRequest, HGetAllRequest__Output as _ember_v1_HGetAllRequest__Output } from '../../ember/v1/HGetAllRequest'; +import type { HDelRequest as _ember_v1_HDelRequest, HDelRequest__Output as _ember_v1_HDelRequest__Output } from '../../ember/v1/HDelRequest'; +import type { HExistsRequest as _ember_v1_HExistsRequest, HExistsRequest__Output as _ember_v1_HExistsRequest__Output } from '../../ember/v1/HExistsRequest'; +import type { HLenRequest as _ember_v1_HLenRequest, HLenRequest__Output as _ember_v1_HLenRequest__Output } from '../../ember/v1/HLenRequest'; +import type { HIncrByRequest as _ember_v1_HIncrByRequest, HIncrByRequest__Output as _ember_v1_HIncrByRequest__Output } from '../../ember/v1/HIncrByRequest'; +import type { HKeysRequest as _ember_v1_HKeysRequest, HKeysRequest__Output as _ember_v1_HKeysRequest__Output } from '../../ember/v1/HKeysRequest'; +import type { HValsRequest as _ember_v1_HValsRequest, HValsRequest__Output as _ember_v1_HValsRequest__Output } from '../../ember/v1/HValsRequest'; +import type { HMGetRequest as _ember_v1_HMGetRequest, HMGetRequest__Output as _ember_v1_HMGetRequest__Output } from '../../ember/v1/HMGetRequest'; +import type { SAddRequest as _ember_v1_SAddRequest, SAddRequest__Output as _ember_v1_SAddRequest__Output } from '../../ember/v1/SAddRequest'; +import type { SRemRequest as _ember_v1_SRemRequest, SRemRequest__Output as _ember_v1_SRemRequest__Output } from '../../ember/v1/SRemRequest'; +import type { SMembersRequest as _ember_v1_SMembersRequest, SMembersRequest__Output as _ember_v1_SMembersRequest__Output } from '../../ember/v1/SMembersRequest'; +import type { SIsMemberRequest as _ember_v1_SIsMemberRequest, SIsMemberRequest__Output as _ember_v1_SIsMemberRequest__Output } from '../../ember/v1/SIsMemberRequest'; +import type { SCardRequest as _ember_v1_SCardRequest, SCardRequest__Output as _ember_v1_SCardRequest__Output } from '../../ember/v1/SCardRequest'; +import type { ZAddRequest as _ember_v1_ZAddRequest, ZAddRequest__Output as _ember_v1_ZAddRequest__Output } from '../../ember/v1/ZAddRequest'; +import type { ZRemRequest as _ember_v1_ZRemRequest, ZRemRequest__Output as _ember_v1_ZRemRequest__Output } from '../../ember/v1/ZRemRequest'; +import type { ZScoreRequest as _ember_v1_ZScoreRequest, ZScoreRequest__Output as _ember_v1_ZScoreRequest__Output } from '../../ember/v1/ZScoreRequest'; +import type { ZRankRequest as _ember_v1_ZRankRequest, ZRankRequest__Output as _ember_v1_ZRankRequest__Output } from '../../ember/v1/ZRankRequest'; +import type { ZCardRequest as _ember_v1_ZCardRequest, ZCardRequest__Output as _ember_v1_ZCardRequest__Output } from '../../ember/v1/ZCardRequest'; +import type { ZRangeRequest as _ember_v1_ZRangeRequest, ZRangeRequest__Output as _ember_v1_ZRangeRequest__Output } from '../../ember/v1/ZRangeRequest'; +import type { VAddRequest as _ember_v1_VAddRequest, VAddRequest__Output as _ember_v1_VAddRequest__Output } from '../../ember/v1/VAddRequest'; +import type { VSimRequest as _ember_v1_VSimRequest, VSimRequest__Output as _ember_v1_VSimRequest__Output } from '../../ember/v1/VSimRequest'; +import type { VRemRequest as _ember_v1_VRemRequest, VRemRequest__Output as _ember_v1_VRemRequest__Output } from '../../ember/v1/VRemRequest'; +import type { VGetRequest as _ember_v1_VGetRequest, VGetRequest__Output as _ember_v1_VGetRequest__Output } from '../../ember/v1/VGetRequest'; +import type { VCardRequest as _ember_v1_VCardRequest, VCardRequest__Output as _ember_v1_VCardRequest__Output } from '../../ember/v1/VCardRequest'; +import type { VDimRequest as _ember_v1_VDimRequest, VDimRequest__Output as _ember_v1_VDimRequest__Output } from '../../ember/v1/VDimRequest'; +import type { VInfoRequest as _ember_v1_VInfoRequest, VInfoRequest__Output as _ember_v1_VInfoRequest__Output } from '../../ember/v1/VInfoRequest'; +import type { PingRequest as _ember_v1_PingRequest, PingRequest__Output as _ember_v1_PingRequest__Output } from '../../ember/v1/PingRequest'; +import type { FlushDbRequest as _ember_v1_FlushDbRequest, FlushDbRequest__Output as _ember_v1_FlushDbRequest__Output } from '../../ember/v1/FlushDbRequest'; +import type { DbSizeRequest as _ember_v1_DbSizeRequest, DbSizeRequest__Output as _ember_v1_DbSizeRequest__Output } from '../../ember/v1/DbSizeRequest'; +import type { MGetRequest as _ember_v1_MGetRequest, MGetRequest__Output as _ember_v1_MGetRequest__Output } from '../../ember/v1/MGetRequest'; +import type { MSetRequest as _ember_v1_MSetRequest, MSetRequest__Output as _ember_v1_MSetRequest__Output } from '../../ember/v1/MSetRequest'; +import type { KeysRequest as _ember_v1_KeysRequest, KeysRequest__Output as _ember_v1_KeysRequest__Output } from '../../ember/v1/KeysRequest'; +import type { RenameRequest as _ember_v1_RenameRequest, RenameRequest__Output as _ember_v1_RenameRequest__Output } from '../../ember/v1/RenameRequest'; +import type { ScanRequest as _ember_v1_ScanRequest, ScanRequest__Output as _ember_v1_ScanRequest__Output } from '../../ember/v1/ScanRequest'; +import type { EchoRequest as _ember_v1_EchoRequest, EchoRequest__Output as _ember_v1_EchoRequest__Output } from '../../ember/v1/EchoRequest'; +import type { DecrRequest as _ember_v1_DecrRequest, DecrRequest__Output as _ember_v1_DecrRequest__Output } from '../../ember/v1/DecrRequest'; +import type { UnlinkRequest as _ember_v1_UnlinkRequest, UnlinkRequest__Output as _ember_v1_UnlinkRequest__Output } from '../../ember/v1/UnlinkRequest'; +import type { BgSaveRequest as _ember_v1_BgSaveRequest, BgSaveRequest__Output as _ember_v1_BgSaveRequest__Output } from '../../ember/v1/BgSaveRequest'; +import type { BgRewriteAofRequest as _ember_v1_BgRewriteAofRequest, BgRewriteAofRequest__Output as _ember_v1_BgRewriteAofRequest__Output } from '../../ember/v1/BgRewriteAofRequest'; +import type { SlowLogGetRequest as _ember_v1_SlowLogGetRequest, SlowLogGetRequest__Output as _ember_v1_SlowLogGetRequest__Output } from '../../ember/v1/SlowLogGetRequest'; +import type { SlowLogLenRequest as _ember_v1_SlowLogLenRequest, SlowLogLenRequest__Output as _ember_v1_SlowLogLenRequest__Output } from '../../ember/v1/SlowLogLenRequest'; +import type { SlowLogResetRequest as _ember_v1_SlowLogResetRequest, SlowLogResetRequest__Output as _ember_v1_SlowLogResetRequest__Output } from '../../ember/v1/SlowLogResetRequest'; +import type { PublishRequest as _ember_v1_PublishRequest, PublishRequest__Output as _ember_v1_PublishRequest__Output } from '../../ember/v1/PublishRequest'; +import type { PubSubChannelsRequest as _ember_v1_PubSubChannelsRequest, PubSubChannelsRequest__Output as _ember_v1_PubSubChannelsRequest__Output } from '../../ember/v1/PubSubChannelsRequest'; +import type { PubSubNumSubRequest as _ember_v1_PubSubNumSubRequest, PubSubNumSubRequest__Output as _ember_v1_PubSubNumSubRequest__Output } from '../../ember/v1/PubSubNumSubRequest'; +import type { PubSubNumPatRequest as _ember_v1_PubSubNumPatRequest, PubSubNumPatRequest__Output as _ember_v1_PubSubNumPatRequest__Output } from '../../ember/v1/PubSubNumPatRequest'; +import type { VAddBatchRequest as _ember_v1_VAddBatchRequest, VAddBatchRequest__Output as _ember_v1_VAddBatchRequest__Output } from '../../ember/v1/VAddBatchRequest'; +import type { GetDelRequest as _ember_v1_GetDelRequest, GetDelRequest__Output as _ember_v1_GetDelRequest__Output } from '../../ember/v1/GetDelRequest'; +import type { GetExRequest as _ember_v1_GetExRequest, GetExRequest__Output as _ember_v1_GetExRequest__Output } from '../../ember/v1/GetExRequest'; +import type { GetRangeRequest as _ember_v1_GetRangeRequest, GetRangeRequest__Output as _ember_v1_GetRangeRequest__Output } from '../../ember/v1/GetRangeRequest'; +import type { SetRangeRequest as _ember_v1_SetRangeRequest, SetRangeRequest__Output as _ember_v1_SetRangeRequest__Output } from '../../ember/v1/SetRangeRequest'; +import type { CopyRequest as _ember_v1_CopyRequest, CopyRequest__Output as _ember_v1_CopyRequest__Output } from '../../ember/v1/CopyRequest'; +import type { RandomKeyRequest as _ember_v1_RandomKeyRequest, RandomKeyRequest__Output as _ember_v1_RandomKeyRequest__Output } from '../../ember/v1/RandomKeyRequest'; +import type { TouchRequest as _ember_v1_TouchRequest, TouchRequest__Output as _ember_v1_TouchRequest__Output } from '../../ember/v1/TouchRequest'; +import type { LIndexRequest as _ember_v1_LIndexRequest, LIndexRequest__Output as _ember_v1_LIndexRequest__Output } from '../../ember/v1/LIndexRequest'; +import type { LSetRequest as _ember_v1_LSetRequest, LSetRequest__Output as _ember_v1_LSetRequest__Output } from '../../ember/v1/LSetRequest'; +import type { LTrimRequest as _ember_v1_LTrimRequest, LTrimRequest__Output as _ember_v1_LTrimRequest__Output } from '../../ember/v1/LTrimRequest'; +import type { LInsertRequest as _ember_v1_LInsertRequest, LInsertRequest__Output as _ember_v1_LInsertRequest__Output } from '../../ember/v1/LInsertRequest'; +import type { LRemRequest as _ember_v1_LRemRequest, LRemRequest__Output as _ember_v1_LRemRequest__Output } from '../../ember/v1/LRemRequest'; +import type { LPosRequest as _ember_v1_LPosRequest, LPosRequest__Output as _ember_v1_LPosRequest__Output } from '../../ember/v1/LPosRequest'; +import type { LMoveRequest as _ember_v1_LMoveRequest, LMoveRequest__Output as _ember_v1_LMoveRequest__Output } from '../../ember/v1/LMoveRequest'; +import type { SUnionRequest as _ember_v1_SUnionRequest, SUnionRequest__Output as _ember_v1_SUnionRequest__Output } from '../../ember/v1/SUnionRequest'; +import type { SInterRequest as _ember_v1_SInterRequest, SInterRequest__Output as _ember_v1_SInterRequest__Output } from '../../ember/v1/SInterRequest'; +import type { SDiffRequest as _ember_v1_SDiffRequest, SDiffRequest__Output as _ember_v1_SDiffRequest__Output } from '../../ember/v1/SDiffRequest'; +import type { SUnionStoreRequest as _ember_v1_SUnionStoreRequest, SUnionStoreRequest__Output as _ember_v1_SUnionStoreRequest__Output } from '../../ember/v1/SUnionStoreRequest'; +import type { SInterStoreRequest as _ember_v1_SInterStoreRequest, SInterStoreRequest__Output as _ember_v1_SInterStoreRequest__Output } from '../../ember/v1/SInterStoreRequest'; +import type { SDiffStoreRequest as _ember_v1_SDiffStoreRequest, SDiffStoreRequest__Output as _ember_v1_SDiffStoreRequest__Output } from '../../ember/v1/SDiffStoreRequest'; +import type { SRandMemberRequest as _ember_v1_SRandMemberRequest, SRandMemberRequest__Output as _ember_v1_SRandMemberRequest__Output } from '../../ember/v1/SRandMemberRequest'; +import type { SPopRequest as _ember_v1_SPopRequest, SPopRequest__Output as _ember_v1_SPopRequest__Output } from '../../ember/v1/SPopRequest'; +import type { SMisMemberRequest as _ember_v1_SMisMemberRequest, SMisMemberRequest__Output as _ember_v1_SMisMemberRequest__Output } from '../../ember/v1/SMisMemberRequest'; +import type { HScanRequest as _ember_v1_HScanRequest, HScanRequest__Output as _ember_v1_HScanRequest__Output } from '../../ember/v1/HScanRequest'; +import type { ZRevRankRequest as _ember_v1_ZRevRankRequest, ZRevRankRequest__Output as _ember_v1_ZRevRankRequest__Output } from '../../ember/v1/ZRevRankRequest'; +import type { ZRevRangeRequest as _ember_v1_ZRevRangeRequest, ZRevRangeRequest__Output as _ember_v1_ZRevRangeRequest__Output } from '../../ember/v1/ZRevRangeRequest'; +import type { ZCountRequest as _ember_v1_ZCountRequest, ZCountRequest__Output as _ember_v1_ZCountRequest__Output } from '../../ember/v1/ZCountRequest'; +import type { ZIncrByRequest as _ember_v1_ZIncrByRequest, ZIncrByRequest__Output as _ember_v1_ZIncrByRequest__Output } from '../../ember/v1/ZIncrByRequest'; +import type { ZRangeByScoreRequest as _ember_v1_ZRangeByScoreRequest, ZRangeByScoreRequest__Output as _ember_v1_ZRangeByScoreRequest__Output } from '../../ember/v1/ZRangeByScoreRequest'; +import type { ZRevRangeByScoreRequest as _ember_v1_ZRevRangeByScoreRequest, ZRevRangeByScoreRequest__Output as _ember_v1_ZRevRangeByScoreRequest__Output } from '../../ember/v1/ZRevRangeByScoreRequest'; +import type { ZPopMinRequest as _ember_v1_ZPopMinRequest, ZPopMinRequest__Output as _ember_v1_ZPopMinRequest__Output } from '../../ember/v1/ZPopMinRequest'; +import type { ZPopMaxRequest as _ember_v1_ZPopMaxRequest, ZPopMaxRequest__Output as _ember_v1_ZPopMaxRequest__Output } from '../../ember/v1/ZPopMaxRequest'; +import type { ZDiffRequest as _ember_v1_ZDiffRequest, ZDiffRequest__Output as _ember_v1_ZDiffRequest__Output } from '../../ember/v1/ZDiffRequest'; +import type { ZInterRequest as _ember_v1_ZInterRequest, ZInterRequest__Output as _ember_v1_ZInterRequest__Output } from '../../ember/v1/ZInterRequest'; +import type { ZUnionRequest as _ember_v1_ZUnionRequest, ZUnionRequest__Output as _ember_v1_ZUnionRequest__Output } from '../../ember/v1/ZUnionRequest'; +import type { ZScanRequest as _ember_v1_ZScanRequest, ZScanRequest__Output as _ember_v1_ZScanRequest__Output } from '../../ember/v1/ZScanRequest'; +import type { SScanRequest as _ember_v1_SScanRequest, SScanRequest__Output as _ember_v1_SScanRequest__Output } from '../../ember/v1/SScanRequest'; +import type { TimeRequest as _ember_v1_TimeRequest, TimeRequest__Output as _ember_v1_TimeRequest__Output } from '../../ember/v1/TimeRequest'; +import type { LastSaveRequest as _ember_v1_LastSaveRequest, LastSaveRequest__Output as _ember_v1_LastSaveRequest__Output } from '../../ember/v1/LastSaveRequest'; +import type { Long } from '@grpc/proto-loader'; + +export interface PipelineRequest { + 'id'?: (number | string | Long); + 'get'?: (_ember_v1_GetRequest | null); + 'set'?: (_ember_v1_SetRequest | null); + 'del'?: (_ember_v1_DelRequest | null); + 'exists'?: (_ember_v1_ExistsRequest | null); + 'incr'?: (_ember_v1_IncrRequest | null); + 'incrBy'?: (_ember_v1_IncrByRequest | null); + 'decrBy'?: (_ember_v1_DecrByRequest | null); + 'incrByFloat'?: (_ember_v1_IncrByFloatRequest | null); + 'append'?: (_ember_v1_AppendRequest | null); + 'strlen'?: (_ember_v1_StrlenRequest | null); + 'expire'?: (_ember_v1_ExpireRequest | null); + 'pexpire'?: (_ember_v1_PExpireRequest | null); + 'persist'?: (_ember_v1_PersistRequest | null); + 'ttl'?: (_ember_v1_TtlRequest | null); + 'pttl'?: (_ember_v1_PTtlRequest | null); + 'type'?: (_ember_v1_TypeRequest | null); + 'lpush'?: (_ember_v1_LPushRequest | null); + 'rpush'?: (_ember_v1_RPushRequest | null); + 'lpop'?: (_ember_v1_LPopRequest | null); + 'rpop'?: (_ember_v1_RPopRequest | null); + 'lrange'?: (_ember_v1_LRangeRequest | null); + 'llen'?: (_ember_v1_LLenRequest | null); + 'hset'?: (_ember_v1_HSetRequest | null); + 'hget'?: (_ember_v1_HGetRequest | null); + 'hgetall'?: (_ember_v1_HGetAllRequest | null); + 'hdel'?: (_ember_v1_HDelRequest | null); + 'hexists'?: (_ember_v1_HExistsRequest | null); + 'hlen'?: (_ember_v1_HLenRequest | null); + 'hincrBy'?: (_ember_v1_HIncrByRequest | null); + 'hkeys'?: (_ember_v1_HKeysRequest | null); + 'hvals'?: (_ember_v1_HValsRequest | null); + 'hmget'?: (_ember_v1_HMGetRequest | null); + 'sadd'?: (_ember_v1_SAddRequest | null); + 'srem'?: (_ember_v1_SRemRequest | null); + 'smembers'?: (_ember_v1_SMembersRequest | null); + 'sismember'?: (_ember_v1_SIsMemberRequest | null); + 'scard'?: (_ember_v1_SCardRequest | null); + 'zadd'?: (_ember_v1_ZAddRequest | null); + 'zrem'?: (_ember_v1_ZRemRequest | null); + 'zscore'?: (_ember_v1_ZScoreRequest | null); + 'zrank'?: (_ember_v1_ZRankRequest | null); + 'zcard'?: (_ember_v1_ZCardRequest | null); + 'zrange'?: (_ember_v1_ZRangeRequest | null); + 'vadd'?: (_ember_v1_VAddRequest | null); + 'vsim'?: (_ember_v1_VSimRequest | null); + 'vrem'?: (_ember_v1_VRemRequest | null); + 'vget'?: (_ember_v1_VGetRequest | null); + 'vcard'?: (_ember_v1_VCardRequest | null); + 'vdim'?: (_ember_v1_VDimRequest | null); + 'vinfo'?: (_ember_v1_VInfoRequest | null); + 'ping'?: (_ember_v1_PingRequest | null); + 'flushdb'?: (_ember_v1_FlushDbRequest | null); + 'dbsize'?: (_ember_v1_DbSizeRequest | null); + 'mget'?: (_ember_v1_MGetRequest | null); + 'mset'?: (_ember_v1_MSetRequest | null); + 'keys'?: (_ember_v1_KeysRequest | null); + 'rename'?: (_ember_v1_RenameRequest | null); + 'scan'?: (_ember_v1_ScanRequest | null); + 'echo'?: (_ember_v1_EchoRequest | null); + 'decr'?: (_ember_v1_DecrRequest | null); + 'unlink'?: (_ember_v1_UnlinkRequest | null); + 'bgsave'?: (_ember_v1_BgSaveRequest | null); + 'bgrewriteaof'?: (_ember_v1_BgRewriteAofRequest | null); + 'slowlogGet'?: (_ember_v1_SlowLogGetRequest | null); + 'slowlogLen'?: (_ember_v1_SlowLogLenRequest | null); + 'slowlogReset'?: (_ember_v1_SlowLogResetRequest | null); + 'publish'?: (_ember_v1_PublishRequest | null); + 'pubsubChannels'?: (_ember_v1_PubSubChannelsRequest | null); + 'pubsubNumsub'?: (_ember_v1_PubSubNumSubRequest | null); + 'pubsubNumpat'?: (_ember_v1_PubSubNumPatRequest | null); + 'vaddBatch'?: (_ember_v1_VAddBatchRequest | null); + 'getDel'?: (_ember_v1_GetDelRequest | null); + 'getEx'?: (_ember_v1_GetExRequest | null); + 'getRange'?: (_ember_v1_GetRangeRequest | null); + 'setRange'?: (_ember_v1_SetRangeRequest | null); + 'copy'?: (_ember_v1_CopyRequest | null); + 'randomKey'?: (_ember_v1_RandomKeyRequest | null); + 'touch'?: (_ember_v1_TouchRequest | null); + 'lindex'?: (_ember_v1_LIndexRequest | null); + 'lset'?: (_ember_v1_LSetRequest | null); + 'ltrim'?: (_ember_v1_LTrimRequest | null); + 'linsert'?: (_ember_v1_LInsertRequest | null); + 'lrem'?: (_ember_v1_LRemRequest | null); + 'lpos'?: (_ember_v1_LPosRequest | null); + 'lmove'?: (_ember_v1_LMoveRequest | null); + 'sunion'?: (_ember_v1_SUnionRequest | null); + 'sinter'?: (_ember_v1_SInterRequest | null); + 'sdiff'?: (_ember_v1_SDiffRequest | null); + 'sunionStore'?: (_ember_v1_SUnionStoreRequest | null); + 'sinterStore'?: (_ember_v1_SInterStoreRequest | null); + 'sdiffStore'?: (_ember_v1_SDiffStoreRequest | null); + 'srandMember'?: (_ember_v1_SRandMemberRequest | null); + 'spop'?: (_ember_v1_SPopRequest | null); + 'smismember'?: (_ember_v1_SMisMemberRequest | null); + 'hscan'?: (_ember_v1_HScanRequest | null); + 'zrevRank'?: (_ember_v1_ZRevRankRequest | null); + 'zrevRange'?: (_ember_v1_ZRevRangeRequest | null); + 'zcount'?: (_ember_v1_ZCountRequest | null); + 'zincrby'?: (_ember_v1_ZIncrByRequest | null); + 'zrangeByScore'?: (_ember_v1_ZRangeByScoreRequest | null); + 'zrevRangeByScore'?: (_ember_v1_ZRevRangeByScoreRequest | null); + 'zpopmin'?: (_ember_v1_ZPopMinRequest | null); + 'zpopmax'?: (_ember_v1_ZPopMaxRequest | null); + 'zdiff'?: (_ember_v1_ZDiffRequest | null); + 'zinter'?: (_ember_v1_ZInterRequest | null); + 'zunion'?: (_ember_v1_ZUnionRequest | null); + 'zscan'?: (_ember_v1_ZScanRequest | null); + 'sscan'?: (_ember_v1_SScanRequest | null); + 'time'?: (_ember_v1_TimeRequest | null); + 'lastSave'?: (_ember_v1_LastSaveRequest | null); + 'command'?: "get"|"set"|"del"|"exists"|"incr"|"incrBy"|"decrBy"|"incrByFloat"|"append"|"strlen"|"expire"|"pexpire"|"persist"|"ttl"|"pttl"|"type"|"lpush"|"rpush"|"lpop"|"rpop"|"lrange"|"llen"|"hset"|"hget"|"hgetall"|"hdel"|"hexists"|"hlen"|"hincrBy"|"hkeys"|"hvals"|"hmget"|"sadd"|"srem"|"smembers"|"sismember"|"scard"|"zadd"|"zrem"|"zscore"|"zrank"|"zcard"|"zrange"|"vadd"|"vsim"|"vrem"|"vget"|"vcard"|"vdim"|"vinfo"|"ping"|"flushdb"|"dbsize"|"mget"|"mset"|"keys"|"rename"|"scan"|"echo"|"decr"|"unlink"|"bgsave"|"bgrewriteaof"|"slowlogGet"|"slowlogLen"|"slowlogReset"|"publish"|"pubsubChannels"|"pubsubNumsub"|"pubsubNumpat"|"vaddBatch"|"getDel"|"getEx"|"getRange"|"setRange"|"copy"|"randomKey"|"touch"|"lindex"|"lset"|"ltrim"|"linsert"|"lrem"|"lpos"|"lmove"|"sunion"|"sinter"|"sdiff"|"sunionStore"|"sinterStore"|"sdiffStore"|"srandMember"|"spop"|"smismember"|"hscan"|"zrevRank"|"zrevRange"|"zcount"|"zincrby"|"zrangeByScore"|"zrevRangeByScore"|"zpopmin"|"zpopmax"|"zdiff"|"zinter"|"zunion"|"zscan"|"sscan"|"time"|"lastSave"; +} + +export interface PipelineRequest__Output { + 'id'?: (Long); + 'get'?: (_ember_v1_GetRequest__Output); + 'set'?: (_ember_v1_SetRequest__Output); + 'del'?: (_ember_v1_DelRequest__Output); + 'exists'?: (_ember_v1_ExistsRequest__Output); + 'incr'?: (_ember_v1_IncrRequest__Output); + 'incrBy'?: (_ember_v1_IncrByRequest__Output); + 'decrBy'?: (_ember_v1_DecrByRequest__Output); + 'incrByFloat'?: (_ember_v1_IncrByFloatRequest__Output); + 'append'?: (_ember_v1_AppendRequest__Output); + 'strlen'?: (_ember_v1_StrlenRequest__Output); + 'expire'?: (_ember_v1_ExpireRequest__Output); + 'pexpire'?: (_ember_v1_PExpireRequest__Output); + 'persist'?: (_ember_v1_PersistRequest__Output); + 'ttl'?: (_ember_v1_TtlRequest__Output); + 'pttl'?: (_ember_v1_PTtlRequest__Output); + 'type'?: (_ember_v1_TypeRequest__Output); + 'lpush'?: (_ember_v1_LPushRequest__Output); + 'rpush'?: (_ember_v1_RPushRequest__Output); + 'lpop'?: (_ember_v1_LPopRequest__Output); + 'rpop'?: (_ember_v1_RPopRequest__Output); + 'lrange'?: (_ember_v1_LRangeRequest__Output); + 'llen'?: (_ember_v1_LLenRequest__Output); + 'hset'?: (_ember_v1_HSetRequest__Output); + 'hget'?: (_ember_v1_HGetRequest__Output); + 'hgetall'?: (_ember_v1_HGetAllRequest__Output); + 'hdel'?: (_ember_v1_HDelRequest__Output); + 'hexists'?: (_ember_v1_HExistsRequest__Output); + 'hlen'?: (_ember_v1_HLenRequest__Output); + 'hincrBy'?: (_ember_v1_HIncrByRequest__Output); + 'hkeys'?: (_ember_v1_HKeysRequest__Output); + 'hvals'?: (_ember_v1_HValsRequest__Output); + 'hmget'?: (_ember_v1_HMGetRequest__Output); + 'sadd'?: (_ember_v1_SAddRequest__Output); + 'srem'?: (_ember_v1_SRemRequest__Output); + 'smembers'?: (_ember_v1_SMembersRequest__Output); + 'sismember'?: (_ember_v1_SIsMemberRequest__Output); + 'scard'?: (_ember_v1_SCardRequest__Output); + 'zadd'?: (_ember_v1_ZAddRequest__Output); + 'zrem'?: (_ember_v1_ZRemRequest__Output); + 'zscore'?: (_ember_v1_ZScoreRequest__Output); + 'zrank'?: (_ember_v1_ZRankRequest__Output); + 'zcard'?: (_ember_v1_ZCardRequest__Output); + 'zrange'?: (_ember_v1_ZRangeRequest__Output); + 'vadd'?: (_ember_v1_VAddRequest__Output); + 'vsim'?: (_ember_v1_VSimRequest__Output); + 'vrem'?: (_ember_v1_VRemRequest__Output); + 'vget'?: (_ember_v1_VGetRequest__Output); + 'vcard'?: (_ember_v1_VCardRequest__Output); + 'vdim'?: (_ember_v1_VDimRequest__Output); + 'vinfo'?: (_ember_v1_VInfoRequest__Output); + 'ping'?: (_ember_v1_PingRequest__Output); + 'flushdb'?: (_ember_v1_FlushDbRequest__Output); + 'dbsize'?: (_ember_v1_DbSizeRequest__Output); + 'mget'?: (_ember_v1_MGetRequest__Output); + 'mset'?: (_ember_v1_MSetRequest__Output); + 'keys'?: (_ember_v1_KeysRequest__Output); + 'rename'?: (_ember_v1_RenameRequest__Output); + 'scan'?: (_ember_v1_ScanRequest__Output); + 'echo'?: (_ember_v1_EchoRequest__Output); + 'decr'?: (_ember_v1_DecrRequest__Output); + 'unlink'?: (_ember_v1_UnlinkRequest__Output); + 'bgsave'?: (_ember_v1_BgSaveRequest__Output); + 'bgrewriteaof'?: (_ember_v1_BgRewriteAofRequest__Output); + 'slowlogGet'?: (_ember_v1_SlowLogGetRequest__Output); + 'slowlogLen'?: (_ember_v1_SlowLogLenRequest__Output); + 'slowlogReset'?: (_ember_v1_SlowLogResetRequest__Output); + 'publish'?: (_ember_v1_PublishRequest__Output); + 'pubsubChannels'?: (_ember_v1_PubSubChannelsRequest__Output); + 'pubsubNumsub'?: (_ember_v1_PubSubNumSubRequest__Output); + 'pubsubNumpat'?: (_ember_v1_PubSubNumPatRequest__Output); + 'vaddBatch'?: (_ember_v1_VAddBatchRequest__Output); + 'getDel'?: (_ember_v1_GetDelRequest__Output); + 'getEx'?: (_ember_v1_GetExRequest__Output); + 'getRange'?: (_ember_v1_GetRangeRequest__Output); + 'setRange'?: (_ember_v1_SetRangeRequest__Output); + 'copy'?: (_ember_v1_CopyRequest__Output); + 'randomKey'?: (_ember_v1_RandomKeyRequest__Output); + 'touch'?: (_ember_v1_TouchRequest__Output); + 'lindex'?: (_ember_v1_LIndexRequest__Output); + 'lset'?: (_ember_v1_LSetRequest__Output); + 'ltrim'?: (_ember_v1_LTrimRequest__Output); + 'linsert'?: (_ember_v1_LInsertRequest__Output); + 'lrem'?: (_ember_v1_LRemRequest__Output); + 'lpos'?: (_ember_v1_LPosRequest__Output); + 'lmove'?: (_ember_v1_LMoveRequest__Output); + 'sunion'?: (_ember_v1_SUnionRequest__Output); + 'sinter'?: (_ember_v1_SInterRequest__Output); + 'sdiff'?: (_ember_v1_SDiffRequest__Output); + 'sunionStore'?: (_ember_v1_SUnionStoreRequest__Output); + 'sinterStore'?: (_ember_v1_SInterStoreRequest__Output); + 'sdiffStore'?: (_ember_v1_SDiffStoreRequest__Output); + 'srandMember'?: (_ember_v1_SRandMemberRequest__Output); + 'spop'?: (_ember_v1_SPopRequest__Output); + 'smismember'?: (_ember_v1_SMisMemberRequest__Output); + 'hscan'?: (_ember_v1_HScanRequest__Output); + 'zrevRank'?: (_ember_v1_ZRevRankRequest__Output); + 'zrevRange'?: (_ember_v1_ZRevRangeRequest__Output); + 'zcount'?: (_ember_v1_ZCountRequest__Output); + 'zincrby'?: (_ember_v1_ZIncrByRequest__Output); + 'zrangeByScore'?: (_ember_v1_ZRangeByScoreRequest__Output); + 'zrevRangeByScore'?: (_ember_v1_ZRevRangeByScoreRequest__Output); + 'zpopmin'?: (_ember_v1_ZPopMinRequest__Output); + 'zpopmax'?: (_ember_v1_ZPopMaxRequest__Output); + 'zdiff'?: (_ember_v1_ZDiffRequest__Output); + 'zinter'?: (_ember_v1_ZInterRequest__Output); + 'zunion'?: (_ember_v1_ZUnionRequest__Output); + 'zscan'?: (_ember_v1_ZScanRequest__Output); + 'sscan'?: (_ember_v1_SScanRequest__Output); + 'time'?: (_ember_v1_TimeRequest__Output); + 'lastSave'?: (_ember_v1_LastSaveRequest__Output); +} diff --git a/clients/ember-ts/src/generated/ember/v1/PipelineResponse.ts b/clients/ember-ts/src/generated/ember/v1/PipelineResponse.ts new file mode 100644 index 00000000..4784135e --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PipelineResponse.ts @@ -0,0 +1,111 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { GetResponse as _ember_v1_GetResponse, GetResponse__Output as _ember_v1_GetResponse__Output } from '../../ember/v1/GetResponse'; +import type { SetResponse as _ember_v1_SetResponse, SetResponse__Output as _ember_v1_SetResponse__Output } from '../../ember/v1/SetResponse'; +import type { DelResponse as _ember_v1_DelResponse, DelResponse__Output as _ember_v1_DelResponse__Output } from '../../ember/v1/DelResponse'; +import type { IntResponse as _ember_v1_IntResponse, IntResponse__Output as _ember_v1_IntResponse__Output } from '../../ember/v1/IntResponse'; +import type { BoolResponse as _ember_v1_BoolResponse, BoolResponse__Output as _ember_v1_BoolResponse__Output } from '../../ember/v1/BoolResponse'; +import type { FloatResponse as _ember_v1_FloatResponse, FloatResponse__Output as _ember_v1_FloatResponse__Output } from '../../ember/v1/FloatResponse'; +import type { StatusResponse as _ember_v1_StatusResponse, StatusResponse__Output as _ember_v1_StatusResponse__Output } from '../../ember/v1/StatusResponse'; +import type { TtlResponse as _ember_v1_TtlResponse, TtlResponse__Output as _ember_v1_TtlResponse__Output } from '../../ember/v1/TtlResponse'; +import type { TypeResponse as _ember_v1_TypeResponse, TypeResponse__Output as _ember_v1_TypeResponse__Output } from '../../ember/v1/TypeResponse'; +import type { ArrayResponse as _ember_v1_ArrayResponse, ArrayResponse__Output as _ember_v1_ArrayResponse__Output } from '../../ember/v1/ArrayResponse'; +import type { HashResponse as _ember_v1_HashResponse, HashResponse__Output as _ember_v1_HashResponse__Output } from '../../ember/v1/HashResponse'; +import type { OptionalArrayResponse as _ember_v1_OptionalArrayResponse, OptionalArrayResponse__Output as _ember_v1_OptionalArrayResponse__Output } from '../../ember/v1/OptionalArrayResponse'; +import type { KeysResponse as _ember_v1_KeysResponse, KeysResponse__Output as _ember_v1_KeysResponse__Output } from '../../ember/v1/KeysResponse'; +import type { ScanResponse as _ember_v1_ScanResponse, ScanResponse__Output as _ember_v1_ScanResponse__Output } from '../../ember/v1/ScanResponse'; +import type { OptionalFloatResponse as _ember_v1_OptionalFloatResponse, OptionalFloatResponse__Output as _ember_v1_OptionalFloatResponse__Output } from '../../ember/v1/OptionalFloatResponse'; +import type { OptionalIntResponse as _ember_v1_OptionalIntResponse, OptionalIntResponse__Output as _ember_v1_OptionalIntResponse__Output } from '../../ember/v1/OptionalIntResponse'; +import type { ZRangeResponse as _ember_v1_ZRangeResponse, ZRangeResponse__Output as _ember_v1_ZRangeResponse__Output } from '../../ember/v1/ZRangeResponse'; +import type { VSimResponse as _ember_v1_VSimResponse, VSimResponse__Output as _ember_v1_VSimResponse__Output } from '../../ember/v1/VSimResponse'; +import type { VGetResponse as _ember_v1_VGetResponse, VGetResponse__Output as _ember_v1_VGetResponse__Output } from '../../ember/v1/VGetResponse'; +import type { VInfoResponse as _ember_v1_VInfoResponse, VInfoResponse__Output as _ember_v1_VInfoResponse__Output } from '../../ember/v1/VInfoResponse'; +import type { MGetResponse as _ember_v1_MGetResponse, MGetResponse__Output as _ember_v1_MGetResponse__Output } from '../../ember/v1/MGetResponse'; +import type { MSetResponse as _ember_v1_MSetResponse, MSetResponse__Output as _ember_v1_MSetResponse__Output } from '../../ember/v1/MSetResponse'; +import type { PingResponse as _ember_v1_PingResponse, PingResponse__Output as _ember_v1_PingResponse__Output } from '../../ember/v1/PingResponse'; +import type { ErrorResponse as _ember_v1_ErrorResponse, ErrorResponse__Output as _ember_v1_ErrorResponse__Output } from '../../ember/v1/ErrorResponse'; +import type { InfoResponse as _ember_v1_InfoResponse, InfoResponse__Output as _ember_v1_InfoResponse__Output } from '../../ember/v1/InfoResponse'; +import type { EchoResponse as _ember_v1_EchoResponse, EchoResponse__Output as _ember_v1_EchoResponse__Output } from '../../ember/v1/EchoResponse'; +import type { SlowLogGetResponse as _ember_v1_SlowLogGetResponse, SlowLogGetResponse__Output as _ember_v1_SlowLogGetResponse__Output } from '../../ember/v1/SlowLogGetResponse'; +import type { PubSubNumSubResponse as _ember_v1_PubSubNumSubResponse, PubSubNumSubResponse__Output as _ember_v1_PubSubNumSubResponse__Output } from '../../ember/v1/PubSubNumSubResponse'; +import type { BoolArrayResponse as _ember_v1_BoolArrayResponse, BoolArrayResponse__Output as _ember_v1_BoolArrayResponse__Output } from '../../ember/v1/BoolArrayResponse'; +import type { HScanResponse as _ember_v1_HScanResponse, HScanResponse__Output as _ember_v1_HScanResponse__Output } from '../../ember/v1/HScanResponse'; +import type { ZScanResponse as _ember_v1_ZScanResponse, ZScanResponse__Output as _ember_v1_ZScanResponse__Output } from '../../ember/v1/ZScanResponse'; +import type { SScanResponse as _ember_v1_SScanResponse, SScanResponse__Output as _ember_v1_SScanResponse__Output } from '../../ember/v1/SScanResponse'; +import type { TimeResponse as _ember_v1_TimeResponse, TimeResponse__Output as _ember_v1_TimeResponse__Output } from '../../ember/v1/TimeResponse'; +import type { Long } from '@grpc/proto-loader'; + +export interface PipelineResponse { + 'id'?: (number | string | Long); + 'get'?: (_ember_v1_GetResponse | null); + 'set'?: (_ember_v1_SetResponse | null); + 'del'?: (_ember_v1_DelResponse | null); + 'intVal'?: (_ember_v1_IntResponse | null); + 'boolVal'?: (_ember_v1_BoolResponse | null); + 'floatVal'?: (_ember_v1_FloatResponse | null); + 'status'?: (_ember_v1_StatusResponse | null); + 'ttl'?: (_ember_v1_TtlResponse | null); + 'type'?: (_ember_v1_TypeResponse | null); + 'array'?: (_ember_v1_ArrayResponse | null); + 'hash'?: (_ember_v1_HashResponse | null); + 'optionalArray'?: (_ember_v1_OptionalArrayResponse | null); + 'keys'?: (_ember_v1_KeysResponse | null); + 'scan'?: (_ember_v1_ScanResponse | null); + 'optionalFloat'?: (_ember_v1_OptionalFloatResponse | null); + 'optionalInt'?: (_ember_v1_OptionalIntResponse | null); + 'zrange'?: (_ember_v1_ZRangeResponse | null); + 'vsim'?: (_ember_v1_VSimResponse | null); + 'vget'?: (_ember_v1_VGetResponse | null); + 'vinfo'?: (_ember_v1_VInfoResponse | null); + 'mget'?: (_ember_v1_MGetResponse | null); + 'mset'?: (_ember_v1_MSetResponse | null); + 'ping'?: (_ember_v1_PingResponse | null); + 'error'?: (_ember_v1_ErrorResponse | null); + 'info'?: (_ember_v1_InfoResponse | null); + 'echo'?: (_ember_v1_EchoResponse | null); + 'slowlogGet'?: (_ember_v1_SlowLogGetResponse | null); + 'pubsubNumsub'?: (_ember_v1_PubSubNumSubResponse | null); + 'boolArray'?: (_ember_v1_BoolArrayResponse | null); + 'hscan'?: (_ember_v1_HScanResponse | null); + 'zscan'?: (_ember_v1_ZScanResponse | null); + 'sscan'?: (_ember_v1_SScanResponse | null); + 'timeResp'?: (_ember_v1_TimeResponse | null); + 'result'?: "get"|"set"|"del"|"intVal"|"boolVal"|"floatVal"|"status"|"ttl"|"type"|"array"|"hash"|"optionalArray"|"keys"|"scan"|"optionalFloat"|"optionalInt"|"zrange"|"vsim"|"vget"|"vinfo"|"mget"|"mset"|"ping"|"error"|"info"|"echo"|"slowlogGet"|"pubsubNumsub"|"boolArray"|"hscan"|"zscan"|"sscan"|"timeResp"; +} + +export interface PipelineResponse__Output { + 'id'?: (Long); + 'get'?: (_ember_v1_GetResponse__Output); + 'set'?: (_ember_v1_SetResponse__Output); + 'del'?: (_ember_v1_DelResponse__Output); + 'intVal'?: (_ember_v1_IntResponse__Output); + 'boolVal'?: (_ember_v1_BoolResponse__Output); + 'floatVal'?: (_ember_v1_FloatResponse__Output); + 'status'?: (_ember_v1_StatusResponse__Output); + 'ttl'?: (_ember_v1_TtlResponse__Output); + 'type'?: (_ember_v1_TypeResponse__Output); + 'array'?: (_ember_v1_ArrayResponse__Output); + 'hash'?: (_ember_v1_HashResponse__Output); + 'optionalArray'?: (_ember_v1_OptionalArrayResponse__Output); + 'keys'?: (_ember_v1_KeysResponse__Output); + 'scan'?: (_ember_v1_ScanResponse__Output); + 'optionalFloat'?: (_ember_v1_OptionalFloatResponse__Output); + 'optionalInt'?: (_ember_v1_OptionalIntResponse__Output); + 'zrange'?: (_ember_v1_ZRangeResponse__Output); + 'vsim'?: (_ember_v1_VSimResponse__Output); + 'vget'?: (_ember_v1_VGetResponse__Output); + 'vinfo'?: (_ember_v1_VInfoResponse__Output); + 'mget'?: (_ember_v1_MGetResponse__Output); + 'mset'?: (_ember_v1_MSetResponse__Output); + 'ping'?: (_ember_v1_PingResponse__Output); + 'error'?: (_ember_v1_ErrorResponse__Output); + 'info'?: (_ember_v1_InfoResponse__Output); + 'echo'?: (_ember_v1_EchoResponse__Output); + 'slowlogGet'?: (_ember_v1_SlowLogGetResponse__Output); + 'pubsubNumsub'?: (_ember_v1_PubSubNumSubResponse__Output); + 'boolArray'?: (_ember_v1_BoolArrayResponse__Output); + 'hscan'?: (_ember_v1_HScanResponse__Output); + 'zscan'?: (_ember_v1_ZScanResponse__Output); + 'sscan'?: (_ember_v1_SScanResponse__Output); + 'timeResp'?: (_ember_v1_TimeResponse__Output); +} diff --git a/clients/ember-ts/src/generated/ember/v1/PubSubChannelsRequest.ts b/clients/ember-ts/src/generated/ember/v1/PubSubChannelsRequest.ts new file mode 100644 index 00000000..a39ffaf9 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PubSubChannelsRequest.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface PubSubChannelsRequest { + 'pattern'?: (string); + '_pattern'?: "pattern"; +} + +export interface PubSubChannelsRequest__Output { + 'pattern'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/PubSubNumPatRequest.ts b/clients/ember-ts/src/generated/ember/v1/PubSubNumPatRequest.ts new file mode 100644 index 00000000..f0d42241 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PubSubNumPatRequest.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface PubSubNumPatRequest { +} + +export interface PubSubNumPatRequest__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/PubSubNumSubRequest.ts b/clients/ember-ts/src/generated/ember/v1/PubSubNumSubRequest.ts new file mode 100644 index 00000000..36786426 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PubSubNumSubRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface PubSubNumSubRequest { + 'channels'?: (string)[]; +} + +export interface PubSubNumSubRequest__Output { + 'channels'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/PubSubNumSubResponse.ts b/clients/ember-ts/src/generated/ember/v1/PubSubNumSubResponse.ts new file mode 100644 index 00000000..87a8b192 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PubSubNumSubResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { ChannelCount as _ember_v1_ChannelCount, ChannelCount__Output as _ember_v1_ChannelCount__Output } from '../../ember/v1/ChannelCount'; + +export interface PubSubNumSubResponse { + 'counts'?: (_ember_v1_ChannelCount)[]; +} + +export interface PubSubNumSubResponse__Output { + 'counts'?: (_ember_v1_ChannelCount__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/PublishRequest.ts b/clients/ember-ts/src/generated/ember/v1/PublishRequest.ts new file mode 100644 index 00000000..84afa4ad --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/PublishRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface PublishRequest { + 'channel'?: (string); + 'message'?: (Buffer | Uint8Array | string); +} + +export interface PublishRequest__Output { + 'channel'?: (string); + 'message'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/RPopRequest.ts b/clients/ember-ts/src/generated/ember/v1/RPopRequest.ts new file mode 100644 index 00000000..d7cafeac --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/RPopRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface RPopRequest { + 'key'?: (string); +} + +export interface RPopRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/RPushRequest.ts b/clients/ember-ts/src/generated/ember/v1/RPushRequest.ts new file mode 100644 index 00000000..cac69acf --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/RPushRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface RPushRequest { + 'key'?: (string); + 'values'?: (Buffer | Uint8Array | string)[]; +} + +export interface RPushRequest__Output { + 'key'?: (string); + 'values'?: (Buffer)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/RandomKeyRequest.ts b/clients/ember-ts/src/generated/ember/v1/RandomKeyRequest.ts new file mode 100644 index 00000000..f92c3092 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/RandomKeyRequest.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface RandomKeyRequest { +} + +export interface RandomKeyRequest__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/RenameRequest.ts b/clients/ember-ts/src/generated/ember/v1/RenameRequest.ts new file mode 100644 index 00000000..dd8b39ba --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/RenameRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface RenameRequest { + 'key'?: (string); + 'newKey'?: (string); +} + +export interface RenameRequest__Output { + 'key'?: (string); + 'newKey'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SAddRequest.ts b/clients/ember-ts/src/generated/ember/v1/SAddRequest.ts new file mode 100644 index 00000000..722131d7 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SAddRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SAddRequest { + 'key'?: (string); + 'members'?: (string)[]; +} + +export interface SAddRequest__Output { + 'key'?: (string); + 'members'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SCardRequest.ts b/clients/ember-ts/src/generated/ember/v1/SCardRequest.ts new file mode 100644 index 00000000..4a570ede --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SCardRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SCardRequest { + 'key'?: (string); +} + +export interface SCardRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SDiffRequest.ts b/clients/ember-ts/src/generated/ember/v1/SDiffRequest.ts new file mode 100644 index 00000000..6b3b6671 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SDiffRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SDiffRequest { + 'keys'?: (string)[]; +} + +export interface SDiffRequest__Output { + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SDiffStoreRequest.ts b/clients/ember-ts/src/generated/ember/v1/SDiffStoreRequest.ts new file mode 100644 index 00000000..709fdbd2 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SDiffStoreRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SDiffStoreRequest { + 'destination'?: (string); + 'keys'?: (string)[]; +} + +export interface SDiffStoreRequest__Output { + 'destination'?: (string); + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SInterRequest.ts b/clients/ember-ts/src/generated/ember/v1/SInterRequest.ts new file mode 100644 index 00000000..d92d1ce6 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SInterRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SInterRequest { + 'keys'?: (string)[]; +} + +export interface SInterRequest__Output { + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SInterStoreRequest.ts b/clients/ember-ts/src/generated/ember/v1/SInterStoreRequest.ts new file mode 100644 index 00000000..6383a9a6 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SInterStoreRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SInterStoreRequest { + 'destination'?: (string); + 'keys'?: (string)[]; +} + +export interface SInterStoreRequest__Output { + 'destination'?: (string); + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SIsMemberRequest.ts b/clients/ember-ts/src/generated/ember/v1/SIsMemberRequest.ts new file mode 100644 index 00000000..67e238dd --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SIsMemberRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SIsMemberRequest { + 'key'?: (string); + 'member'?: (string); +} + +export interface SIsMemberRequest__Output { + 'key'?: (string); + 'member'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SMembersRequest.ts b/clients/ember-ts/src/generated/ember/v1/SMembersRequest.ts new file mode 100644 index 00000000..923f232b --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SMembersRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SMembersRequest { + 'key'?: (string); +} + +export interface SMembersRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SMisMemberRequest.ts b/clients/ember-ts/src/generated/ember/v1/SMisMemberRequest.ts new file mode 100644 index 00000000..dcaaf763 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SMisMemberRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SMisMemberRequest { + 'key'?: (string); + 'members'?: (string)[]; +} + +export interface SMisMemberRequest__Output { + 'key'?: (string); + 'members'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SPopRequest.ts b/clients/ember-ts/src/generated/ember/v1/SPopRequest.ts new file mode 100644 index 00000000..f5d00885 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SPopRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SPopRequest { + 'key'?: (string); + 'count'?: (number); +} + +export interface SPopRequest__Output { + 'key'?: (string); + 'count'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SRandMemberRequest.ts b/clients/ember-ts/src/generated/ember/v1/SRandMemberRequest.ts new file mode 100644 index 00000000..9db883f9 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SRandMemberRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SRandMemberRequest { + 'key'?: (string); + 'count'?: (number); +} + +export interface SRandMemberRequest__Output { + 'key'?: (string); + 'count'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SRemRequest.ts b/clients/ember-ts/src/generated/ember/v1/SRemRequest.ts new file mode 100644 index 00000000..c9d78716 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SRemRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SRemRequest { + 'key'?: (string); + 'members'?: (string)[]; +} + +export interface SRemRequest__Output { + 'key'?: (string); + 'members'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SScanRequest.ts b/clients/ember-ts/src/generated/ember/v1/SScanRequest.ts new file mode 100644 index 00000000..fe8ef968 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SScanRequest.ts @@ -0,0 +1,18 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface SScanRequest { + 'key'?: (string); + 'cursor'?: (number | string | Long); + 'pattern'?: (string); + 'count'?: (number); + '_pattern'?: "pattern"; +} + +export interface SScanRequest__Output { + 'key'?: (string); + 'cursor'?: (Long); + 'pattern'?: (string); + 'count'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SScanResponse.ts b/clients/ember-ts/src/generated/ember/v1/SScanResponse.ts new file mode 100644 index 00000000..a498dfe3 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SScanResponse.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface SScanResponse { + 'cursor'?: (number | string | Long); + 'members'?: (string)[]; +} + +export interface SScanResponse__Output { + 'cursor'?: (Long); + 'members'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SUnionRequest.ts b/clients/ember-ts/src/generated/ember/v1/SUnionRequest.ts new file mode 100644 index 00000000..fa0af08c --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SUnionRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SUnionRequest { + 'keys'?: (string)[]; +} + +export interface SUnionRequest__Output { + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SUnionStoreRequest.ts b/clients/ember-ts/src/generated/ember/v1/SUnionStoreRequest.ts new file mode 100644 index 00000000..fa0ac995 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SUnionStoreRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SUnionStoreRequest { + 'destination'?: (string); + 'keys'?: (string)[]; +} + +export interface SUnionStoreRequest__Output { + 'destination'?: (string); + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/ScanRequest.ts b/clients/ember-ts/src/generated/ember/v1/ScanRequest.ts new file mode 100644 index 00000000..729a359b --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ScanRequest.ts @@ -0,0 +1,16 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface ScanRequest { + 'cursor'?: (number | string | Long); + 'count'?: (number); + 'pattern'?: (string); + '_pattern'?: "pattern"; +} + +export interface ScanRequest__Output { + 'cursor'?: (Long); + 'count'?: (number); + 'pattern'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ScanResponse.ts b/clients/ember-ts/src/generated/ember/v1/ScanResponse.ts new file mode 100644 index 00000000..c2270c0d --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ScanResponse.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface ScanResponse { + 'cursor'?: (number | string | Long); + 'keys'?: (string)[]; +} + +export interface ScanResponse__Output { + 'cursor'?: (Long); + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/ScoreMember.ts b/clients/ember-ts/src/generated/ember/v1/ScoreMember.ts new file mode 100644 index 00000000..dc6719f3 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ScoreMember.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ScoreMember { + 'score'?: (number | string); + 'member'?: (string); +} + +export interface ScoreMember__Output { + 'score'?: (number); + 'member'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SetRangeRequest.ts b/clients/ember-ts/src/generated/ember/v1/SetRangeRequest.ts new file mode 100644 index 00000000..2227708b --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SetRangeRequest.ts @@ -0,0 +1,15 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface SetRangeRequest { + 'key'?: (string); + 'offset'?: (number | string | Long); + 'value'?: (Buffer | Uint8Array | string); +} + +export interface SetRangeRequest__Output { + 'key'?: (string); + 'offset'?: (Long); + 'value'?: (Buffer); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SetRequest.ts b/clients/ember-ts/src/generated/ember/v1/SetRequest.ts new file mode 100644 index 00000000..f00d8d85 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SetRequest.ts @@ -0,0 +1,21 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface SetRequest { + 'key'?: (string); + 'value'?: (Buffer | Uint8Array | string); + 'expireSeconds'?: (number | string | Long); + 'expireMillis'?: (number | string | Long); + 'nx'?: (boolean); + 'xx'?: (boolean); +} + +export interface SetRequest__Output { + 'key'?: (string); + 'value'?: (Buffer); + 'expireSeconds'?: (Long); + 'expireMillis'?: (Long); + 'nx'?: (boolean); + 'xx'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SetResponse.ts b/clients/ember-ts/src/generated/ember/v1/SetResponse.ts new file mode 100644 index 00000000..312de00f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SetResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SetResponse { + 'ok'?: (boolean); +} + +export interface SetResponse__Output { + 'ok'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SlowLogEntry.ts b/clients/ember-ts/src/generated/ember/v1/SlowLogEntry.ts new file mode 100644 index 00000000..7a839b3a --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SlowLogEntry.ts @@ -0,0 +1,17 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface SlowLogEntry { + 'id'?: (number | string | Long); + 'timestampUnix'?: (number | string | Long); + 'durationMicros'?: (number | string | Long); + 'command'?: (string); +} + +export interface SlowLogEntry__Output { + 'id'?: (Long); + 'timestampUnix'?: (Long); + 'durationMicros'?: (Long); + 'command'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SlowLogGetRequest.ts b/clients/ember-ts/src/generated/ember/v1/SlowLogGetRequest.ts new file mode 100644 index 00000000..02ba3949 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SlowLogGetRequest.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SlowLogGetRequest { + 'count'?: (number); + '_count'?: "count"; +} + +export interface SlowLogGetRequest__Output { + 'count'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SlowLogGetResponse.ts b/clients/ember-ts/src/generated/ember/v1/SlowLogGetResponse.ts new file mode 100644 index 00000000..6bb10932 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SlowLogGetResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { SlowLogEntry as _ember_v1_SlowLogEntry, SlowLogEntry__Output as _ember_v1_SlowLogEntry__Output } from '../../ember/v1/SlowLogEntry'; + +export interface SlowLogGetResponse { + 'entries'?: (_ember_v1_SlowLogEntry)[]; +} + +export interface SlowLogGetResponse__Output { + 'entries'?: (_ember_v1_SlowLogEntry__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/SlowLogLenRequest.ts b/clients/ember-ts/src/generated/ember/v1/SlowLogLenRequest.ts new file mode 100644 index 00000000..8dab8975 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SlowLogLenRequest.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SlowLogLenRequest { +} + +export interface SlowLogLenRequest__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/SlowLogResetRequest.ts b/clients/ember-ts/src/generated/ember/v1/SlowLogResetRequest.ts new file mode 100644 index 00000000..ac172d79 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SlowLogResetRequest.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SlowLogResetRequest { +} + +export interface SlowLogResetRequest__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/StatusResponse.ts b/clients/ember-ts/src/generated/ember/v1/StatusResponse.ts new file mode 100644 index 00000000..365a2572 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/StatusResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface StatusResponse { + 'status'?: (string); +} + +export interface StatusResponse__Output { + 'status'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/StrlenRequest.ts b/clients/ember-ts/src/generated/ember/v1/StrlenRequest.ts new file mode 100644 index 00000000..6957ca64 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/StrlenRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface StrlenRequest { + 'key'?: (string); +} + +export interface StrlenRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SubscribeEvent.ts b/clients/ember-ts/src/generated/ember/v1/SubscribeEvent.ts new file mode 100644 index 00000000..272d2801 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SubscribeEvent.ts @@ -0,0 +1,17 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SubscribeEvent { + 'kind'?: (string); + 'channel'?: (string); + 'data'?: (Buffer | Uint8Array | string); + 'pattern'?: (string); + '_pattern'?: "pattern"; +} + +export interface SubscribeEvent__Output { + 'kind'?: (string); + 'channel'?: (string); + 'data'?: (Buffer); + 'pattern'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/SubscribeRequest.ts b/clients/ember-ts/src/generated/ember/v1/SubscribeRequest.ts new file mode 100644 index 00000000..e1b2f943 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/SubscribeRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface SubscribeRequest { + 'channels'?: (string)[]; + 'patterns'?: (string)[]; +} + +export interface SubscribeRequest__Output { + 'channels'?: (string)[]; + 'patterns'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/TimeRequest.ts b/clients/ember-ts/src/generated/ember/v1/TimeRequest.ts new file mode 100644 index 00000000..98eb3a06 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/TimeRequest.ts @@ -0,0 +1,8 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface TimeRequest { +} + +export interface TimeRequest__Output { +} diff --git a/clients/ember-ts/src/generated/ember/v1/TimeResponse.ts b/clients/ember-ts/src/generated/ember/v1/TimeResponse.ts new file mode 100644 index 00000000..31fdeb11 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/TimeResponse.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface TimeResponse { + 'seconds'?: (number | string | Long); + 'microseconds'?: (number | string | Long); +} + +export interface TimeResponse__Output { + 'seconds'?: (Long); + 'microseconds'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/TouchRequest.ts b/clients/ember-ts/src/generated/ember/v1/TouchRequest.ts new file mode 100644 index 00000000..9bf5da4a --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/TouchRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface TouchRequest { + 'keys'?: (string)[]; +} + +export interface TouchRequest__Output { + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/TtlRequest.ts b/clients/ember-ts/src/generated/ember/v1/TtlRequest.ts new file mode 100644 index 00000000..40542efd --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/TtlRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface TtlRequest { + 'key'?: (string); +} + +export interface TtlRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/TtlResponse.ts b/clients/ember-ts/src/generated/ember/v1/TtlResponse.ts new file mode 100644 index 00000000..7645d85d --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/TtlResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface TtlResponse { + 'value'?: (number | string | Long); +} + +export interface TtlResponse__Output { + 'value'?: (Long); +} diff --git a/clients/ember-ts/src/generated/ember/v1/TypeRequest.ts b/clients/ember-ts/src/generated/ember/v1/TypeRequest.ts new file mode 100644 index 00000000..320d9d59 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/TypeRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface TypeRequest { + 'key'?: (string); +} + +export interface TypeRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/TypeResponse.ts b/clients/ember-ts/src/generated/ember/v1/TypeResponse.ts new file mode 100644 index 00000000..686a6ce0 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/TypeResponse.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface TypeResponse { + 'typeName'?: (string); +} + +export interface TypeResponse__Output { + 'typeName'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/UnlinkRequest.ts b/clients/ember-ts/src/generated/ember/v1/UnlinkRequest.ts new file mode 100644 index 00000000..9a879bb0 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/UnlinkRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface UnlinkRequest { + 'keys'?: (string)[]; +} + +export interface UnlinkRequest__Output { + 'keys'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/VAddBatchEntry.ts b/clients/ember-ts/src/generated/ember/v1/VAddBatchEntry.ts new file mode 100644 index 00000000..f488cc51 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VAddBatchEntry.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface VAddBatchEntry { + 'element'?: (string); + 'vector'?: (number | string)[]; +} + +export interface VAddBatchEntry__Output { + 'element'?: (string); + 'vector'?: (number)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/VAddBatchRequest.ts b/clients/ember-ts/src/generated/ember/v1/VAddBatchRequest.ts new file mode 100644 index 00000000..119b5ec5 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VAddBatchRequest.ts @@ -0,0 +1,25 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { VAddBatchEntry as _ember_v1_VAddBatchEntry, VAddBatchEntry__Output as _ember_v1_VAddBatchEntry__Output } from '../../ember/v1/VAddBatchEntry'; +import type { VectorMetric as _ember_v1_VectorMetric, VectorMetric__Output as _ember_v1_VectorMetric__Output } from '../../ember/v1/VectorMetric'; +import type { VectorQuantization as _ember_v1_VectorQuantization, VectorQuantization__Output as _ember_v1_VectorQuantization__Output } from '../../ember/v1/VectorQuantization'; + +export interface VAddBatchRequest { + 'key'?: (string); + 'entries'?: (_ember_v1_VAddBatchEntry)[]; + 'metric'?: (_ember_v1_VectorMetric); + 'quantization'?: (_ember_v1_VectorQuantization); + 'connectivity'?: (number); + 'efConstruction'?: (number); + '_connectivity'?: "connectivity"; + '_efConstruction'?: "efConstruction"; +} + +export interface VAddBatchRequest__Output { + 'key'?: (string); + 'entries'?: (_ember_v1_VAddBatchEntry__Output)[]; + 'metric'?: (_ember_v1_VectorMetric__Output); + 'quantization'?: (_ember_v1_VectorQuantization__Output); + 'connectivity'?: (number); + 'efConstruction'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/VAddRequest.ts b/clients/ember-ts/src/generated/ember/v1/VAddRequest.ts new file mode 100644 index 00000000..0990d084 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VAddRequest.ts @@ -0,0 +1,26 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { VectorMetric as _ember_v1_VectorMetric, VectorMetric__Output as _ember_v1_VectorMetric__Output } from '../../ember/v1/VectorMetric'; +import type { VectorQuantization as _ember_v1_VectorQuantization, VectorQuantization__Output as _ember_v1_VectorQuantization__Output } from '../../ember/v1/VectorQuantization'; + +export interface VAddRequest { + 'key'?: (string); + 'element'?: (string); + 'vector'?: (number | string)[]; + 'metric'?: (_ember_v1_VectorMetric); + 'quantization'?: (_ember_v1_VectorQuantization); + 'connectivity'?: (number); + 'efConstruction'?: (number); + '_connectivity'?: "connectivity"; + '_efConstruction'?: "efConstruction"; +} + +export interface VAddRequest__Output { + 'key'?: (string); + 'element'?: (string); + 'vector'?: (number)[]; + 'metric'?: (_ember_v1_VectorMetric__Output); + 'quantization'?: (_ember_v1_VectorQuantization__Output); + 'connectivity'?: (number); + 'efConstruction'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/VCardRequest.ts b/clients/ember-ts/src/generated/ember/v1/VCardRequest.ts new file mode 100644 index 00000000..292c532f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VCardRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface VCardRequest { + 'key'?: (string); +} + +export interface VCardRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/VDimRequest.ts b/clients/ember-ts/src/generated/ember/v1/VDimRequest.ts new file mode 100644 index 00000000..2fb16363 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VDimRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface VDimRequest { + 'key'?: (string); +} + +export interface VDimRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/VGetRequest.ts b/clients/ember-ts/src/generated/ember/v1/VGetRequest.ts new file mode 100644 index 00000000..43244b64 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VGetRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface VGetRequest { + 'key'?: (string); + 'element'?: (string); +} + +export interface VGetRequest__Output { + 'key'?: (string); + 'element'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/VGetResponse.ts b/clients/ember-ts/src/generated/ember/v1/VGetResponse.ts new file mode 100644 index 00000000..bf44b2ac --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VGetResponse.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface VGetResponse { + 'exists'?: (boolean); + 'vector'?: (number | string)[]; + '_exists'?: "exists"; +} + +export interface VGetResponse__Output { + 'exists'?: (boolean); + 'vector'?: (number)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/VInfoRequest.ts b/clients/ember-ts/src/generated/ember/v1/VInfoRequest.ts new file mode 100644 index 00000000..9752d54c --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VInfoRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface VInfoRequest { + 'key'?: (string); +} + +export interface VInfoRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/VInfoResponse.ts b/clients/ember-ts/src/generated/ember/v1/VInfoResponse.ts new file mode 100644 index 00000000..4487d576 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VInfoResponse.ts @@ -0,0 +1,13 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { FieldValue as _ember_v1_FieldValue, FieldValue__Output as _ember_v1_FieldValue__Output } from '../../ember/v1/FieldValue'; + +export interface VInfoResponse { + 'exists'?: (boolean); + 'info'?: (_ember_v1_FieldValue)[]; +} + +export interface VInfoResponse__Output { + 'exists'?: (boolean); + 'info'?: (_ember_v1_FieldValue__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/VRemRequest.ts b/clients/ember-ts/src/generated/ember/v1/VRemRequest.ts new file mode 100644 index 00000000..7a74a2d3 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VRemRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface VRemRequest { + 'key'?: (string); + 'element'?: (string); +} + +export interface VRemRequest__Output { + 'key'?: (string); + 'element'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/VSimRequest.ts b/clients/ember-ts/src/generated/ember/v1/VSimRequest.ts new file mode 100644 index 00000000..3188389f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VSimRequest.ts @@ -0,0 +1,17 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface VSimRequest { + 'key'?: (string); + 'query'?: (number | string)[]; + 'count'?: (number); + 'efSearch'?: (number); + '_efSearch'?: "efSearch"; +} + +export interface VSimRequest__Output { + 'key'?: (string); + 'query'?: (number)[]; + 'count'?: (number); + 'efSearch'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/VSimResponse.ts b/clients/ember-ts/src/generated/ember/v1/VSimResponse.ts new file mode 100644 index 00000000..a5b57d7f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VSimResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { VSimResult as _ember_v1_VSimResult, VSimResult__Output as _ember_v1_VSimResult__Output } from '../../ember/v1/VSimResult'; + +export interface VSimResponse { + 'results'?: (_ember_v1_VSimResult)[]; +} + +export interface VSimResponse__Output { + 'results'?: (_ember_v1_VSimResult__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/VSimResult.ts b/clients/ember-ts/src/generated/ember/v1/VSimResult.ts new file mode 100644 index 00000000..c63f31cc --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VSimResult.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface VSimResult { + 'element'?: (string); + 'distance'?: (number | string); +} + +export interface VSimResult__Output { + 'element'?: (string); + 'distance'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/VectorMetric.ts b/clients/ember-ts/src/generated/ember/v1/VectorMetric.ts new file mode 100644 index 00000000..5432a49e --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VectorMetric.ts @@ -0,0 +1,17 @@ +// Original file: ../../proto/ember/v1/ember.proto + +export const VectorMetric = { + VECTOR_METRIC_COSINE: 0, + VECTOR_METRIC_EUCLIDEAN: 1, + VECTOR_METRIC_INNER_PRODUCT: 2, +} as const; + +export type VectorMetric = + | 'VECTOR_METRIC_COSINE' + | 0 + | 'VECTOR_METRIC_EUCLIDEAN' + | 1 + | 'VECTOR_METRIC_INNER_PRODUCT' + | 2 + +export type VectorMetric__Output = typeof VectorMetric[keyof typeof VectorMetric] diff --git a/clients/ember-ts/src/generated/ember/v1/VectorQuantization.ts b/clients/ember-ts/src/generated/ember/v1/VectorQuantization.ts new file mode 100644 index 00000000..17725a12 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/VectorQuantization.ts @@ -0,0 +1,17 @@ +// Original file: ../../proto/ember/v1/ember.proto + +export const VectorQuantization = { + VECTOR_QUANTIZATION_NONE: 0, + VECTOR_QUANTIZATION_F16: 1, + VECTOR_QUANTIZATION_I8: 2, +} as const; + +export type VectorQuantization = + | 'VECTOR_QUANTIZATION_NONE' + | 0 + | 'VECTOR_QUANTIZATION_F16' + | 1 + | 'VECTOR_QUANTIZATION_I8' + | 2 + +export type VectorQuantization__Output = typeof VectorQuantization[keyof typeof VectorQuantization] diff --git a/clients/ember-ts/src/generated/ember/v1/ZAddRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZAddRequest.ts new file mode 100644 index 00000000..dc900e05 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZAddRequest.ts @@ -0,0 +1,23 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { ScoreMember as _ember_v1_ScoreMember, ScoreMember__Output as _ember_v1_ScoreMember__Output } from '../../ember/v1/ScoreMember'; + +export interface ZAddRequest { + 'key'?: (string); + 'members'?: (_ember_v1_ScoreMember)[]; + 'nx'?: (boolean); + 'xx'?: (boolean); + 'gt'?: (boolean); + 'lt'?: (boolean); + 'ch'?: (boolean); +} + +export interface ZAddRequest__Output { + 'key'?: (string); + 'members'?: (_ember_v1_ScoreMember__Output)[]; + 'nx'?: (boolean); + 'xx'?: (boolean); + 'gt'?: (boolean); + 'lt'?: (boolean); + 'ch'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZCardRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZCardRequest.ts new file mode 100644 index 00000000..16daf7b3 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZCardRequest.ts @@ -0,0 +1,10 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZCardRequest { + 'key'?: (string); +} + +export interface ZCardRequest__Output { + 'key'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZCountRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZCountRequest.ts new file mode 100644 index 00000000..9e7521b9 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZCountRequest.ts @@ -0,0 +1,14 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZCountRequest { + 'key'?: (string); + 'min'?: (string); + 'max'?: (string); +} + +export interface ZCountRequest__Output { + 'key'?: (string); + 'min'?: (string); + 'max'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZDiffRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZDiffRequest.ts new file mode 100644 index 00000000..1aee85a1 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZDiffRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZDiffRequest { + 'keys'?: (string)[]; + 'withScores'?: (boolean); +} + +export interface ZDiffRequest__Output { + 'keys'?: (string)[]; + 'withScores'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZIncrByRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZIncrByRequest.ts new file mode 100644 index 00000000..66762c3c --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZIncrByRequest.ts @@ -0,0 +1,14 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZIncrByRequest { + 'key'?: (string); + 'delta'?: (number | string); + 'member'?: (string); +} + +export interface ZIncrByRequest__Output { + 'key'?: (string); + 'delta'?: (number); + 'member'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZInterRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZInterRequest.ts new file mode 100644 index 00000000..e6a8d18f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZInterRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZInterRequest { + 'keys'?: (string)[]; + 'withScores'?: (boolean); +} + +export interface ZInterRequest__Output { + 'keys'?: (string)[]; + 'withScores'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZPopMaxRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZPopMaxRequest.ts new file mode 100644 index 00000000..c9841a1f --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZPopMaxRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZPopMaxRequest { + 'key'?: (string); + 'count'?: (number); +} + +export interface ZPopMaxRequest__Output { + 'key'?: (string); + 'count'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZPopMinRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZPopMinRequest.ts new file mode 100644 index 00000000..9093e5a8 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZPopMinRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZPopMinRequest { + 'key'?: (string); + 'count'?: (number); +} + +export interface ZPopMinRequest__Output { + 'key'?: (string); + 'count'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZRangeByScoreRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZRangeByScoreRequest.ts new file mode 100644 index 00000000..ca84f6b3 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZRangeByScoreRequest.ts @@ -0,0 +1,23 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface ZRangeByScoreRequest { + 'key'?: (string); + 'min'?: (string); + 'max'?: (string); + 'offset'?: (number | string | Long); + 'count'?: (number | string | Long); + 'withScores'?: (boolean); + '_offset'?: "offset"; + '_count'?: "count"; +} + +export interface ZRangeByScoreRequest__Output { + 'key'?: (string); + 'min'?: (string); + 'max'?: (string); + 'offset'?: (Long); + 'count'?: (Long); + 'withScores'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZRangeRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZRangeRequest.ts new file mode 100644 index 00000000..dfe729b0 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZRangeRequest.ts @@ -0,0 +1,17 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface ZRangeRequest { + 'key'?: (string); + 'start'?: (number | string | Long); + 'stop'?: (number | string | Long); + 'withScores'?: (boolean); +} + +export interface ZRangeRequest__Output { + 'key'?: (string); + 'start'?: (Long); + 'stop'?: (Long); + 'withScores'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZRangeResponse.ts b/clients/ember-ts/src/generated/ember/v1/ZRangeResponse.ts new file mode 100644 index 00000000..bbc4cdeb --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZRangeResponse.ts @@ -0,0 +1,11 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { ScoreMember as _ember_v1_ScoreMember, ScoreMember__Output as _ember_v1_ScoreMember__Output } from '../../ember/v1/ScoreMember'; + +export interface ZRangeResponse { + 'members'?: (_ember_v1_ScoreMember)[]; +} + +export interface ZRangeResponse__Output { + 'members'?: (_ember_v1_ScoreMember__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZRankRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZRankRequest.ts new file mode 100644 index 00000000..05232099 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZRankRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZRankRequest { + 'key'?: (string); + 'member'?: (string); +} + +export interface ZRankRequest__Output { + 'key'?: (string); + 'member'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZRemRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZRemRequest.ts new file mode 100644 index 00000000..2fe25804 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZRemRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZRemRequest { + 'key'?: (string); + 'members'?: (string)[]; +} + +export interface ZRemRequest__Output { + 'key'?: (string); + 'members'?: (string)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZRevRangeByScoreRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZRevRangeByScoreRequest.ts new file mode 100644 index 00000000..a77129fc --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZRevRangeByScoreRequest.ts @@ -0,0 +1,23 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface ZRevRangeByScoreRequest { + 'key'?: (string); + 'max'?: (string); + 'min'?: (string); + 'offset'?: (number | string | Long); + 'count'?: (number | string | Long); + 'withScores'?: (boolean); + '_offset'?: "offset"; + '_count'?: "count"; +} + +export interface ZRevRangeByScoreRequest__Output { + 'key'?: (string); + 'max'?: (string); + 'min'?: (string); + 'offset'?: (Long); + 'count'?: (Long); + 'withScores'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZRevRangeRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZRevRangeRequest.ts new file mode 100644 index 00000000..4f4a1611 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZRevRangeRequest.ts @@ -0,0 +1,17 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface ZRevRangeRequest { + 'key'?: (string); + 'start'?: (number | string | Long); + 'stop'?: (number | string | Long); + 'withScores'?: (boolean); +} + +export interface ZRevRangeRequest__Output { + 'key'?: (string); + 'start'?: (Long); + 'stop'?: (Long); + 'withScores'?: (boolean); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZRevRankRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZRevRankRequest.ts new file mode 100644 index 00000000..dcaf3416 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZRevRankRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZRevRankRequest { + 'key'?: (string); + 'member'?: (string); +} + +export interface ZRevRankRequest__Output { + 'key'?: (string); + 'member'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZScanRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZScanRequest.ts new file mode 100644 index 00000000..7c9007cb --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZScanRequest.ts @@ -0,0 +1,18 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { Long } from '@grpc/proto-loader'; + +export interface ZScanRequest { + 'key'?: (string); + 'cursor'?: (number | string | Long); + 'pattern'?: (string); + 'count'?: (number); + '_pattern'?: "pattern"; +} + +export interface ZScanRequest__Output { + 'key'?: (string); + 'cursor'?: (Long); + 'pattern'?: (string); + 'count'?: (number); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZScanResponse.ts b/clients/ember-ts/src/generated/ember/v1/ZScanResponse.ts new file mode 100644 index 00000000..b94565d5 --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZScanResponse.ts @@ -0,0 +1,14 @@ +// Original file: ../../proto/ember/v1/ember.proto + +import type { ScoreMember as _ember_v1_ScoreMember, ScoreMember__Output as _ember_v1_ScoreMember__Output } from '../../ember/v1/ScoreMember'; +import type { Long } from '@grpc/proto-loader'; + +export interface ZScanResponse { + 'cursor'?: (number | string | Long); + 'members'?: (_ember_v1_ScoreMember)[]; +} + +export interface ZScanResponse__Output { + 'cursor'?: (Long); + 'members'?: (_ember_v1_ScoreMember__Output)[]; +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZScoreRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZScoreRequest.ts new file mode 100644 index 00000000..92f7ae4d --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZScoreRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZScoreRequest { + 'key'?: (string); + 'member'?: (string); +} + +export interface ZScoreRequest__Output { + 'key'?: (string); + 'member'?: (string); +} diff --git a/clients/ember-ts/src/generated/ember/v1/ZUnionRequest.ts b/clients/ember-ts/src/generated/ember/v1/ZUnionRequest.ts new file mode 100644 index 00000000..5e34523e --- /dev/null +++ b/clients/ember-ts/src/generated/ember/v1/ZUnionRequest.ts @@ -0,0 +1,12 @@ +// Original file: ../../proto/ember/v1/ember.proto + + +export interface ZUnionRequest { + 'keys'?: (string)[]; + 'withScores'?: (boolean); +} + +export interface ZUnionRequest__Output { + 'keys'?: (string)[]; + 'withScores'?: (boolean); +} diff --git a/clients/ember-ts/tsconfig.json b/clients/ember-ts/tsconfig.json new file mode 100644 index 00000000..f9516372 --- /dev/null +++ b/clients/ember-ts/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["ES2020"], + "outDir": "dist", + "rootDir": "src", + "strict": true, + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} From 912155fb6f210420161e2aa06b3722305e1df776 Mon Sep 17 00:00:00 2001 From: Kacy Fortner Date: Wed, 25 Feb 2026 14:48:15 -0500 Subject: [PATCH 2/2] =?UTF-8?q?feat(ts):=20implement=20ember-ts=20client?= =?UTF-8?q?=20=E2=80=94=2065+=20methods,=20full=20api=20parity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit adds the hand-written layer on top of the generated proto stubs: - src/types.ts: all exported interfaces (ClientOptions, SetOptions, ScoreMember, VSimResult, ScanPage, HScanPage, ZScanPage, SScanPage, SlowLogEntry, SubscribeEvent, TimeResult, VGetResult, VInfoResult, etc.) - src/client.ts: EmberClient class with 65+ async methods covering strings, keys, lists, hashes, sets, sorted sets, vectors, pub/sub, server, and slowlog commands. subscribe() returns an AsyncIterable backed by a buffered promise queue so for-await works cleanly. - src/index.ts: re-exports EmberClient and all public types - README.md: full api table, quickstart, auth example, scan/leaderboard examples, and type reference - package.json: exports map, engines (>=18), files list (dist/ + proto/), keywords, @types/node devDep - Makefile: build target + proto copy step - proto/ember/v1/ember.proto: bundled copy so the package is self-contained without requiring the repo's proto/ directory zero tsc errors, builds cleanly with tsc --- clients/ember-ts/.gitignore | 2 + clients/ember-ts/Makefile | 9 +- clients/ember-ts/README.md | 443 ++++++ clients/ember-ts/package-lock.json | 388 +++++ clients/ember-ts/package.json | 28 +- clients/ember-ts/proto/ember/v1/ember.proto | 1180 ++++++++++++++++ clients/ember-ts/src/client.ts | 1410 +++++++++++++++++++ clients/ember-ts/src/index.ts | 26 + clients/ember-ts/src/types.ts | 246 ++++ 9 files changed, 3727 insertions(+), 5 deletions(-) create mode 100644 clients/ember-ts/.gitignore create mode 100644 clients/ember-ts/README.md create mode 100644 clients/ember-ts/package-lock.json create mode 100644 clients/ember-ts/proto/ember/v1/ember.proto create mode 100644 clients/ember-ts/src/client.ts create mode 100644 clients/ember-ts/src/index.ts create mode 100644 clients/ember-ts/src/types.ts diff --git a/clients/ember-ts/.gitignore b/clients/ember-ts/.gitignore new file mode 100644 index 00000000..b9470778 --- /dev/null +++ b/clients/ember-ts/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +dist/ diff --git a/clients/ember-ts/Makefile b/clients/ember-ts/Makefile index 1d9af69e..ca8cb0d4 100644 --- a/clients/ember-ts/Makefile +++ b/clients/ember-ts/Makefile @@ -1,13 +1,18 @@ -.PHONY: proto-gen test clean +.PHONY: proto-gen build test clean proto-gen: npx --yes --package=@grpc/proto-loader proto-loader-gen-types \ --proto_path=../../proto \ --outDir=src/generated \ ../../proto/ember/v1/ember.proto + mkdir -p proto/ember/v1 + cp ../../proto/ember/v1/ember.proto proto/ember/v1/ember.proto + +build: + npm run build test: npm test clean: - rm -rf src/generated node_modules + rm -rf dist src/generated node_modules diff --git a/clients/ember-ts/README.md b/clients/ember-ts/README.md new file mode 100644 index 00000000..70f3422f --- /dev/null +++ b/clients/ember-ts/README.md @@ -0,0 +1,443 @@ +# ember-ts + +TypeScript client for [ember](https://github.com/kacy/ember) — a high-performance, Redis-compatible cache built in Rust. + +Communicates over gRPC (default port `6380`). Full IDE autocomplete, Buffer-based API, and async iterables for pub/sub. + +## install + +```bash +npm install ember-ts +``` + +## quickstart + +```ts +import { EmberClient } from 'ember-ts'; + +const client = new EmberClient('localhost:6380'); + +await client.set('greeting', 'hello'); +const val = await client.get('greeting'); +console.log(val?.toString()); // "hello" + +await client.set('counter', '0'); +await client.incr('counter'); +console.log(await client.get('counter')); // ("1") + +client.close(); +``` + +## authentication + +```ts +const client = new EmberClient('localhost:6380', { password: 'secret' }); +``` + +The password is sent as the `authorization` gRPC metadata header on every call. + +## api + +All methods return `Promise` and throw on error. + +### strings + +| method | args | returns | +|--------|------|---------| +| `get(key)` | `key: string` | `Buffer \| null` | +| `set(key, value, opts?)` | `key`, `value: Buffer \| string`, [`SetOptions`](#setoptions) | `boolean` | +| `del(...keys)` | `...string` | `number` | +| `mGet(keys)` | `string[]` | `(Buffer \| null)[]` | +| `mSet(entries)` | `Record` | `void` | +| `incr(key)` | `key: string` | `number` | +| `incrBy(key, delta)` | `key`, `delta: number` | `number` | +| `decrBy(key, delta)` | `key`, `delta: number` | `number` | +| `decr(key)` | `key: string` | `number` | +| `incrByFloat(key, delta)` | `key`, `delta: number` | `number` | +| `append(key, value)` | `key`, `value: Buffer \| string` | `number` | +| `strlen(key)` | `key: string` | `number` | +| `getDel(key)` | `key: string` | `Buffer \| null` | +| `getEx(key, opts?)` | `key`, [`GetExOptions`](#getexoptions) | `Buffer \| null` | +| `getRange(key, start, end)` | `key`, `start`, `end: number` | `Buffer` | +| `setRange(key, offset, value)` | `key`, `offset: number`, `value: Buffer \| string` | `number` | + +### keys + +| method | args | returns | +|--------|------|---------| +| `exists(...keys)` | `...string` | `number` | +| `expire(key, seconds)` | `key`, `seconds: number` | `boolean` | +| `pExpire(key, ms)` | `key`, `ms: number` | `boolean` | +| `persist(key)` | `key: string` | `boolean` | +| `ttl(key)` | `key: string` | `number` | +| `pTtl(key)` | `key: string` | `number` | +| `type(key)` | `key: string` | `string` | +| `keys(pattern)` | `pattern: string` | `string[]` | +| `rename(key, newKey)` | `key`, `newKey: string` | `void` | +| `scan(cursor, opts?)` | `cursor: number`, [`ScanOptions`](#scanoptions) | [`ScanPage`](#scanpage) | +| `copy(src, dst, replace?)` | `src`, `dst: string`, `replace?: boolean` | `boolean` | +| `randomKey()` | — | `string \| null` | +| `touch(...keys)` | `...string` | `number` | +| `unlink(...keys)` | `...string` | `number` | + +### lists + +| method | args | returns | +|--------|------|---------| +| `lPush(key, ...values)` | `key`, `...Buffer \| string` | `number` | +| `rPush(key, ...values)` | `key`, `...Buffer \| string` | `number` | +| `lPop(key)` | `key: string` | `Buffer \| null` | +| `rPop(key)` | `key: string` | `Buffer \| null` | +| `lRange(key, start, stop)` | `key`, `start`, `stop: number` | `Buffer[]` | +| `lLen(key)` | `key: string` | `number` | +| `lIndex(key, index)` | `key`, `index: number` | `Buffer \| null` | +| `lSet(key, index, value)` | `key`, `index: number`, `value: Buffer \| string` | `void` | +| `lTrim(key, start, stop)` | `key`, `start`, `stop: number` | `void` | +| `lInsert(key, before, pivot, value)` | `key`, `before: boolean`, `pivot`, `value: Buffer \| string` | `number` | +| `lRem(key, count, value)` | `key`, `count: number`, `value: Buffer \| string` | `number` | +| `lPos(key, value, count?)` | `key`, `value: Buffer \| string`, `count?: number` | `number \| null` | +| `lMove(src, dst, srcLeft, dstLeft)` | `src`, `dst: string`, `srcLeft`, `dstLeft: boolean` | `Buffer \| null` | + +### hashes + +| method | args | returns | +|--------|------|---------| +| `hSet(key, fields)` | `key`, `Record` | `number` | +| `hGet(key, field)` | `key`, `field: string` | `Buffer \| null` | +| `hGetAll(key)` | `key: string` | `Record` | +| `hDel(key, ...fields)` | `key`, `...string` | `number` | +| `hExists(key, field)` | `key`, `field: string` | `boolean` | +| `hLen(key)` | `key: string` | `number` | +| `hKeys(key)` | `key: string` | `string[]` | +| `hVals(key)` | `key: string` | `Buffer[]` | +| `hmGet(key, fields)` | `key`, `string[]` | `(Buffer \| null)[]` | +| `hIncrBy(key, field, delta)` | `key`, `field: string`, `delta: number` | `number` | +| `hScan(key, cursor, opts?)` | `key`, `cursor: number`, [`ScanOptions`](#scanoptions) | [`HScanPage`](#hscanpage) | + +### sets + +| method | args | returns | +|--------|------|---------| +| `sAdd(key, ...members)` | `key`, `...string` | `number` | +| `sRem(key, ...members)` | `key`, `...string` | `number` | +| `sMembers(key)` | `key: string` | `string[]` | +| `sIsMember(key, member)` | `key`, `member: string` | `boolean` | +| `sCard(key)` | `key: string` | `number` | +| `sUnion(...keys)` | `...string` | `string[]` | +| `sInter(...keys)` | `...string` | `string[]` | +| `sDiff(...keys)` | `...string` | `string[]` | +| `sUnionStore(dst, ...keys)` | `dst: string`, `...string` | `number` | +| `sInterStore(dst, ...keys)` | `dst: string`, `...string` | `number` | +| `sDiffStore(dst, ...keys)` | `dst: string`, `...string` | `number` | +| `sRandMember(key, count)` | `key`, `count: number` | `string[]` | +| `sPop(key, count)` | `key`, `count: number` | `string[]` | +| `sMisMember(key, ...members)` | `key`, `...string` | `boolean[]` | +| `sScan(key, cursor, opts?)` | `key`, `cursor: number`, [`ScanOptions`](#scanoptions) | [`SScanPage`](#sscanpage) | + +### sorted sets + +| method | args | returns | +|--------|------|---------| +| `zAdd(key, members, opts?)` | `key`, [`ScoreMember[]`](#scoremember), [`ZAddOptions`](#zaddoptions) | `number` | +| `zRem(key, ...members)` | `key`, `...string` | `number` | +| `zScore(key, member)` | `key`, `member: string` | `number \| null` | +| `zRank(key, member)` | `key`, `member: string` | `number \| null` | +| `zRevRank(key, member)` | `key`, `member: string` | `number \| null` | +| `zCard(key)` | `key: string` | `number` | +| `zRange(key, start, stop, withScores?)` | `key`, `start`, `stop: number`, `withScores?: boolean` | [`ScoreMember[]`](#scoremember) | +| `zRevRange(key, start, stop, withScores?)` | `key`, `start`, `stop: number`, `withScores?: boolean` | [`ScoreMember[]`](#scoremember) | +| `zCount(key, min, max)` | `key`, `min`, `max: string` | `number` | +| `zIncrBy(key, delta, member)` | `key`, `delta: number`, `member: string` | `number` | +| `zRangeByScore(key, min, max, opts?)` | `key`, `min`, `max: string`, [`ZRangeByScoreOptions`](#zrangebyscoreoptions) | [`ScoreMember[]`](#scoremember) | +| `zRevRangeByScore(key, max, min, opts?)` | `key`, `max`, `min: string`, [`ZRangeByScoreOptions`](#zrangebyscoreoptions) | [`ScoreMember[]`](#scoremember) | +| `zPopMin(key, count?)` | `key`, `count?: number` | [`ScoreMember[]`](#scoremember) | +| `zPopMax(key, count?)` | `key`, `count?: number` | [`ScoreMember[]`](#scoremember) | +| `zDiff(keys, withScores?)` | `string[]`, `withScores?: boolean` | [`ScoreMember[]`](#scoremember) | +| `zInter(keys, withScores?)` | `string[]`, `withScores?: boolean` | [`ScoreMember[]`](#scoremember) | +| `zUnion(keys, withScores?)` | `string[]`, `withScores?: boolean` | [`ScoreMember[]`](#scoremember) | +| `zScan(key, cursor, opts?)` | `key`, `cursor: number`, [`ScanOptions`](#scanoptions) | [`ZScanPage`](#zscanpage) | + +### vectors + +Requires the server to be built with the `vector` feature. + +| method | args | returns | +|--------|------|---------| +| `vAdd(key, element, vector, opts?)` | `key`, `element: string`, `number[]`, [`VAddOptions`](#vaddoptions) | `boolean` | +| `vAddBatch(key, entries, opts?)` | `key`, [`VAddBatchEntry[]`](#vaddbatchentry), [`VAddBatchOptions`](#vaddbatchoptions) | `number` | +| `vSim(key, query, count, opts?)` | `key`, `number[]`, `count: number`, [`VSimOptions`](#vsimoptions) | [`VSimResult[]`](#vsimresult) | +| `vRem(key, element)` | `key`, `element: string` | `boolean` | +| `vGet(key, element)` | `key`, `element: string` | [`VGetResult`](#vgetresult) | +| `vCard(key)` | `key: string` | `number` | +| `vDim(key)` | `key: string` | `number` | +| `vInfo(key)` | `key: string` | [`VInfoResult`](#vinforesult) | + +### pub/sub + +```ts +// publish +await client.publish('news', 'breaking story'); + +// subscribe (async iterable) +for await (const evt of client.subscribe(['news', 'alerts'])) { + console.log(evt.kind, evt.channel, evt.data?.toString()); + if (shouldStop) break; // cancels the stream cleanly +} + +// pattern subscriptions work the same way +for await (const evt of client.subscribe([], ['user:*'])) { + console.log(`pattern match: ${evt.pattern}, channel: ${evt.channel}`); +} +``` + +| method | args | returns | +|--------|------|---------| +| `publish(channel, message)` | `channel: string`, `message: Buffer \| string` | `number` | +| `subscribe(channels, patterns?)` | `string[]`, `string[]` | `AsyncIterable` | +| `pubSubChannels(pattern?)` | `pattern?: string` | `string[]` | +| `pubSubNumSub(...channels)` | `...string` | `Map` | +| `pubSubNumPat()` | — | `number` | + +### server + +| method | args | returns | +|--------|------|---------| +| `ping(message?)` | `message?: string` | `string` | +| `echo(message)` | `message: string` | `string` | +| `flushDb(async?)` | `async?: boolean` | `void` | +| `dbSize()` | — | `number` | +| `info(section?)` | `section?: string` | `string` | +| `bgSave()` | — | `string` | +| `bgRewriteAof()` | — | `string` | +| `time()` | — | [`TimeResult`](#timeresult) | +| `lastSave()` | — | `number` | + +### slowlog + +| method | args | returns | +|--------|------|---------| +| `slowLogGet(count?)` | `count?: number` | [`SlowLogEntry[]`](#slowlogentry) | +| `slowLogLen()` | — | `number` | +| `slowLogReset()` | — | `void` | + +## types + +### SetOptions + +```ts +interface SetOptions { + ex?: number; // TTL in seconds + px?: number; // TTL in milliseconds + nx?: boolean; // only set if the key does not exist + xx?: boolean; // only set if the key already exists +} +``` + +### GetExOptions + +```ts +interface GetExOptions { + ex?: number; // set expiry in seconds + px?: number; // set expiry in milliseconds + persist?: boolean; // remove expiry, making the key permanent +} +``` + +### ScanOptions + +```ts +interface ScanOptions { + pattern?: string; // glob pattern to filter results + count?: number; // hint for page size (server may return more or fewer) +} +``` + +### ZAddOptions + +```ts +interface ZAddOptions { + nx?: boolean; // only add new members + xx?: boolean; // only update existing members + gt?: boolean; // only update if new score > current score + lt?: boolean; // only update if new score < current score + ch?: boolean; // count changed elements, not just added ones +} +``` + +### ZRangeByScoreOptions + +```ts +interface ZRangeByScoreOptions { + offset?: number; // pagination offset + count?: number; // max results + withScores?: boolean; // include scores in response +} +``` + +### VAddOptions + +```ts +interface VAddOptions { + metric?: VectorMetric; // distance metric (default: cosine) + quantization?: VectorQuantization; // storage quantization + connectivity?: number; // HNSW M parameter + efConstruction?: number; // HNSW ef_construction parameter +} +``` + +### VAddBatchEntry + +```ts +interface VAddBatchEntry { + element: string; + vector: number[]; +} +``` + +### VSimOptions + +```ts +interface VSimOptions { + efSearch?: number; // recall vs. latency trade-off +} +``` + +### ScoreMember + +```ts +interface ScoreMember { + member: string; + score: number; +} +``` + +### VSimResult + +```ts +interface VSimResult { + element: string; + distance: number; +} +``` + +### SlowLogEntry + +```ts +interface SlowLogEntry { + id: number; + timestamp: number; // unix timestamp + durationMicros: number; // execution time in microseconds + command: string; +} +``` + +### SubscribeEvent + +```ts +interface SubscribeEvent { + kind: string; // "message" or "pmessage" + channel: string; + data: Buffer | null; + pattern?: string; // set for pmessage events +} +``` + +### ScanPage + +```ts +interface ScanPage { + cursor: number; // 0 = scan complete + keys: string[]; +} +``` + +### HScanPage + +```ts +interface HScanPage { + cursor: number; + fields: Record; +} +``` + +### ZScanPage + +```ts +interface ZScanPage { + cursor: number; + members: ScoreMember[]; +} +``` + +### SScanPage + +```ts +interface SScanPage { + cursor: number; + members: string[]; +} +``` + +### TimeResult + +```ts +interface TimeResult { + seconds: number; // unix timestamp (whole seconds) + microseconds: number; // offset within the current second +} +``` + +### VGetResult + +```ts +interface VGetResult { + exists: boolean; + vector: number[]; +} +``` + +### VInfoResult + +```ts +interface VInfoResult { + exists: boolean; + info: Record; // metric, dimensions, capacity, etc. +} +``` + +## scan example + +```ts +let cursor = 0; +do { + const page = await client.scan(cursor, { pattern: 'user:*', count: 100 }); + cursor = page.cursor; + for (const key of page.keys) { + console.log(key); + } +} while (cursor !== 0); +``` + +## leaderboard example + +```ts +// add scores +await client.zAdd('scores', [ + { member: 'alice', score: 9500 }, + { member: 'bob', score: 8200 }, + { member: 'carol', score: 9800 }, +]); + +// top 3 +const top = await client.zRange('scores', 0, 2, true); +top.forEach(({ member, score }) => console.log(member, score)); + +// carol's rank (0-indexed from highest) +const rank = await client.zRevRank('scores', 'carol'); // 0 +``` + +## connection details + +- default address: `localhost:6380` +- transport: gRPC over plaintext (TLS support coming) +- the proto file is bundled in `proto/ember/v1/ember.proto` diff --git a/clients/ember-ts/package-lock.json b/clients/ember-ts/package-lock.json new file mode 100644 index 00000000..bc48ee84 --- /dev/null +++ b/clients/ember-ts/package-lock.json @@ -0,0 +1,388 @@ +{ + "name": "ember-ts", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ember-ts", + "version": "0.1.0", + "dependencies": { + "@grpc/grpc-js": "^1.12.0", + "@grpc/proto-loader": "^0.7.0" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "typescript": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz", + "integrity": "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@types/node": { + "version": "22.19.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz", + "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/clients/ember-ts/package.json b/clients/ember-ts/package.json index 84c12e0d..8423518f 100644 --- a/clients/ember-ts/package.json +++ b/clients/ember-ts/package.json @@ -1,19 +1,41 @@ { "name": "ember-ts", "version": "0.1.0", - "description": "TypeScript client for the ember cache server over gRPC", + "description": "TypeScript client for ember — a high-performance gRPC cache", "main": "dist/index.js", "types": "dist/index.d.ts", + "exports": { + ".": { + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "files": [ + "dist/", + "proto/" + ], + "engines": { + "node": ">=18" + }, + "keywords": [ + "ember", + "emberkv", + "cache", + "grpc", + "key-value", + "redis-compatible" + ], "scripts": { "build": "tsc", - "test": "echo \"no tests yet\"", - "proto-gen": "npx --package=@grpc/proto-loader proto-loader-gen-types --proto_path=../../proto --outDir=src/generated ../../proto/ember/v1/ember.proto" + "proto-gen": "npx --yes --package=@grpc/proto-loader proto-loader-gen-types --proto_path=../../proto --outDir=src/generated ../../proto/ember/v1/ember.proto && mkdir -p proto/ember/v1 && cp ../../proto/ember/v1/ember.proto proto/ember/v1/ember.proto", + "test": "echo \"no tests yet\"" }, "dependencies": { "@grpc/grpc-js": "^1.12.0", "@grpc/proto-loader": "^0.7.0" }, "devDependencies": { + "@types/node": "^22.0.0", "typescript": "^5.0.0" } } diff --git a/clients/ember-ts/proto/ember/v1/ember.proto b/clients/ember-ts/proto/ember/v1/ember.proto new file mode 100644 index 00000000..cd0a7a35 --- /dev/null +++ b/clients/ember-ts/proto/ember/v1/ember.proto @@ -0,0 +1,1180 @@ +syntax = "proto3"; +package ember.v1; + +option go_package = "github.com/kacy/ember-go/proto/ember/v1;emberv1"; + +// EmberCache provides a gRPC interface to ember's key-value store. +// all commands route through the same engine as RESP3, so behavior +// is identical regardless of protocol. +service EmberCache { + // --- strings --- + + rpc Get(GetRequest) returns (GetResponse); + rpc Set(SetRequest) returns (SetResponse); + rpc Del(DelRequest) returns (DelResponse); + rpc MGet(MGetRequest) returns (MGetResponse); + rpc MSet(MSetRequest) returns (MSetResponse); + rpc Incr(IncrRequest) returns (IntResponse); + rpc IncrBy(IncrByRequest) returns (IntResponse); + rpc DecrBy(DecrByRequest) returns (IntResponse); + rpc IncrByFloat(IncrByFloatRequest) returns (FloatResponse); + rpc Append(AppendRequest) returns (IntResponse); + rpc Strlen(StrlenRequest) returns (IntResponse); + + // --- keys --- + + rpc Exists(ExistsRequest) returns (IntResponse); + rpc Expire(ExpireRequest) returns (BoolResponse); + rpc PExpire(PExpireRequest) returns (BoolResponse); + rpc Persist(PersistRequest) returns (BoolResponse); + rpc Ttl(TtlRequest) returns (TtlResponse); + rpc PTtl(PTtlRequest) returns (TtlResponse); + rpc Type(TypeRequest) returns (TypeResponse); + rpc Keys(KeysRequest) returns (KeysResponse); + rpc Rename(RenameRequest) returns (StatusResponse); + rpc Scan(ScanRequest) returns (ScanResponse); + + // --- lists --- + + rpc LPush(LPushRequest) returns (IntResponse); + rpc RPush(RPushRequest) returns (IntResponse); + rpc LPop(LPopRequest) returns (GetResponse); + rpc RPop(RPopRequest) returns (GetResponse); + rpc LRange(LRangeRequest) returns (ArrayResponse); + rpc LLen(LLenRequest) returns (IntResponse); + + // --- hashes --- + + rpc HSet(HSetRequest) returns (IntResponse); + rpc HGet(HGetRequest) returns (GetResponse); + rpc HGetAll(HGetAllRequest) returns (HashResponse); + rpc HDel(HDelRequest) returns (IntResponse); + rpc HExists(HExistsRequest) returns (BoolResponse); + rpc HLen(HLenRequest) returns (IntResponse); + rpc HIncrBy(HIncrByRequest) returns (IntResponse); + rpc HKeys(HKeysRequest) returns (KeysResponse); + rpc HVals(HValsRequest) returns (ArrayResponse); + rpc HMGet(HMGetRequest) returns (OptionalArrayResponse); + + // --- sets --- + + rpc SAdd(SAddRequest) returns (IntResponse); + rpc SRem(SRemRequest) returns (IntResponse); + rpc SMembers(SMembersRequest) returns (KeysResponse); + rpc SIsMember(SIsMemberRequest) returns (BoolResponse); + rpc SCard(SCardRequest) returns (IntResponse); + + // --- sorted sets --- + + rpc ZAdd(ZAddRequest) returns (IntResponse); + rpc ZRem(ZRemRequest) returns (IntResponse); + rpc ZScore(ZScoreRequest) returns (OptionalFloatResponse); + rpc ZRank(ZRankRequest) returns (OptionalIntResponse); + rpc ZCard(ZCardRequest) returns (IntResponse); + rpc ZRange(ZRangeRequest) returns (ZRangeResponse); + + // --- vectors --- + // only available when the server is built with the vector feature. + + rpc VAdd(VAddRequest) returns (BoolResponse); + rpc VAddBatch(VAddBatchRequest) returns (IntResponse); + rpc VSim(VSimRequest) returns (VSimResponse); + rpc VRem(VRemRequest) returns (BoolResponse); + rpc VGet(VGetRequest) returns (VGetResponse); + rpc VCard(VCardRequest) returns (IntResponse); + rpc VDim(VDimRequest) returns (IntResponse); + rpc VInfo(VInfoRequest) returns (VInfoResponse); + + // --- server --- + + rpc Ping(PingRequest) returns (PingResponse); + rpc Echo(EchoRequest) returns (EchoResponse); + rpc Decr(DecrRequest) returns (IntResponse); + rpc Unlink(UnlinkRequest) returns (DelResponse); + rpc FlushDb(FlushDbRequest) returns (StatusResponse); + rpc DbSize(DbSizeRequest) returns (IntResponse); + rpc Info(InfoRequest) returns (InfoResponse); + rpc BgSave(BgSaveRequest) returns (StatusResponse); + rpc BgRewriteAof(BgRewriteAofRequest) returns (StatusResponse); + + // --- slowlog --- + + rpc SlowLogGet(SlowLogGetRequest) returns (SlowLogGetResponse); + rpc SlowLogLen(SlowLogLenRequest) returns (IntResponse); + rpc SlowLogReset(SlowLogResetRequest) returns (StatusResponse); + + // --- pub/sub --- + + rpc Publish(PublishRequest) returns (IntResponse); + rpc Subscribe(SubscribeRequest) returns (stream SubscribeEvent); + rpc PubSubChannels(PubSubChannelsRequest) returns (KeysResponse); + rpc PubSubNumSub(PubSubNumSubRequest) returns (PubSubNumSubResponse); + rpc PubSubNumPat(PubSubNumPatRequest) returns (IntResponse); + + // --- strings (extended) --- + + rpc GetDel(GetDelRequest) returns (GetResponse); + rpc GetEx(GetExRequest) returns (GetResponse); + rpc GetRange(GetRangeRequest) returns (GetResponse); + rpc SetRange(SetRangeRequest) returns (IntResponse); + + // --- keys (extended) --- + + rpc Copy(CopyRequest) returns (BoolResponse); + rpc RandomKey(RandomKeyRequest) returns (GetResponse); + rpc Touch(TouchRequest) returns (IntResponse); + + // --- lists (extended) --- + + rpc LIndex(LIndexRequest) returns (GetResponse); + rpc LSet(LSetRequest) returns (StatusResponse); + rpc LTrim(LTrimRequest) returns (StatusResponse); + rpc LInsert(LInsertRequest) returns (IntResponse); + rpc LRem(LRemRequest) returns (IntResponse); + rpc LPos(LPosRequest) returns (OptionalIntResponse); + rpc LMove(LMoveRequest) returns (GetResponse); + + // --- sets (extended) --- + + rpc SUnion(SUnionRequest) returns (KeysResponse); + rpc SInter(SInterRequest) returns (KeysResponse); + rpc SDiff(SDiffRequest) returns (KeysResponse); + rpc SUnionStore(SUnionStoreRequest) returns (IntResponse); + rpc SInterStore(SInterStoreRequest) returns (IntResponse); + rpc SDiffStore(SDiffStoreRequest) returns (IntResponse); + rpc SRandMember(SRandMemberRequest) returns (ArrayResponse); + rpc SPop(SPopRequest) returns (ArrayResponse); + rpc SMisMember(SMisMemberRequest) returns (BoolArrayResponse); + + // --- hashes (extended) --- + + rpc HScan(HScanRequest) returns (HScanResponse); + + // --- sorted sets (extended) --- + + rpc ZRevRank(ZRevRankRequest) returns (OptionalIntResponse); + rpc ZRevRange(ZRevRangeRequest) returns (ZRangeResponse); + rpc ZCount(ZCountRequest) returns (IntResponse); + rpc ZIncrBy(ZIncrByRequest) returns (FloatResponse); + rpc ZRangeByScore(ZRangeByScoreRequest) returns (ZRangeResponse); + rpc ZRevRangeByScore(ZRevRangeByScoreRequest) returns (ZRangeResponse); + rpc ZPopMin(ZPopMinRequest) returns (ZRangeResponse); + rpc ZPopMax(ZPopMaxRequest) returns (ZRangeResponse); + rpc ZDiff(ZDiffRequest) returns (ZRangeResponse); + rpc ZInter(ZInterRequest) returns (ZRangeResponse); + rpc ZUnion(ZUnionRequest) returns (ZRangeResponse); + rpc ZScan(ZScanRequest) returns (ZScanResponse); + + // --- scans --- + + rpc SScan(SScanRequest) returns (SScanResponse); + + // --- server (extended) --- + + rpc Time(TimeRequest) returns (TimeResponse); + rpc LastSave(LastSaveRequest) returns (IntResponse); + + // --- streaming --- + // bidirectional streaming for batch operations, matching RESP3 pipelining. + + rpc Pipeline(stream PipelineRequest) returns (stream PipelineResponse); +} + +// --------------------------------------------------------------------------- +// shared response types +// --------------------------------------------------------------------------- + +message IntResponse { + int64 value = 1; +} + +message BoolResponse { + bool value = 1; +} + +message FloatResponse { + string value = 1; +} + +message StatusResponse { + string status = 1; +} + +message BoolArrayResponse { + repeated bool values = 1; +} + +// --------------------------------------------------------------------------- +// strings +// --------------------------------------------------------------------------- + +message GetRequest { + string key = 1; +} + +message GetResponse { + optional bytes value = 1; +} + +message SetRequest { + string key = 1; + bytes value = 2; + // expire time in seconds. 0 means no expiration. + uint64 expire_seconds = 3; + // expire time in milliseconds. takes precedence over expire_seconds. + uint64 expire_millis = 4; + // NX: only set if key does not exist. + bool nx = 5; + // XX: only set if key already exists. + bool xx = 6; +} + +message SetResponse { + // true if the key was set, false if NX/XX condition prevented it. + bool ok = 1; +} + +message DelRequest { + repeated string keys = 1; +} + +message DelResponse { + int64 deleted = 1; +} + +message MGetRequest { + repeated string keys = 1; +} + +message MGetResponse { + // one entry per requested key. missing keys have value unset. + repeated OptionalValue values = 1; +} + +message OptionalValue { + optional bytes value = 1; +} + +message MSetRequest { + repeated KeyValue pairs = 1; +} + +message KeyValue { + string key = 1; + bytes value = 2; +} + +message MSetResponse {} + +message IncrRequest { + string key = 1; +} + +message IncrByRequest { + string key = 1; + int64 delta = 2; +} + +message DecrByRequest { + string key = 1; + int64 delta = 2; +} + +message IncrByFloatRequest { + string key = 1; + double delta = 2; +} + +message AppendRequest { + string key = 1; + bytes value = 2; +} + +message StrlenRequest { + string key = 1; +} + +message GetDelRequest { + string key = 1; +} + +message GetExRequest { + string key = 1; + // set expiry in seconds (ignored if expire_millis > 0). + uint64 expire_seconds = 2; + // set expiry in milliseconds (takes precedence over expire_seconds). + uint64 expire_millis = 3; + // remove the existing expiry, making the key persistent. + bool persist = 4; +} + +message GetRangeRequest { + string key = 1; + int64 start = 2; + int64 end = 3; +} + +message SetRangeRequest { + string key = 1; + int64 offset = 2; + bytes value = 3; +} + +// --------------------------------------------------------------------------- +// keys +// --------------------------------------------------------------------------- + +message ExistsRequest { + repeated string keys = 1; +} + +message ExpireRequest { + string key = 1; + uint64 seconds = 2; +} + +message PExpireRequest { + string key = 1; + uint64 milliseconds = 2; +} + +message PersistRequest { + string key = 1; +} + +message TtlRequest { + string key = 1; +} + +message PTtlRequest { + string key = 1; +} + +message TtlResponse { + // -2 = key does not exist, -1 = no expiry, >= 0 = remaining time. + int64 value = 1; +} + +message TypeRequest { + string key = 1; +} + +message TypeResponse { + string type_name = 1; +} + +message KeysRequest { + string pattern = 1; +} + +message KeysResponse { + repeated string keys = 1; +} + +message RenameRequest { + string key = 1; + string new_key = 2; +} + +message ScanRequest { + uint64 cursor = 1; + uint32 count = 2; + optional string pattern = 3; +} + +message ScanResponse { + uint64 cursor = 1; + repeated string keys = 2; +} + +message CopyRequest { + string source = 1; + string destination = 2; + // overwrite the destination key if it already exists. + bool replace = 3; +} + +message RandomKeyRequest {} + +message TouchRequest { + repeated string keys = 1; +} + +// --------------------------------------------------------------------------- +// lists +// --------------------------------------------------------------------------- + +message LPushRequest { + string key = 1; + repeated bytes values = 2; +} + +message RPushRequest { + string key = 1; + repeated bytes values = 2; +} + +message LPopRequest { + string key = 1; +} + +message RPopRequest { + string key = 1; +} + +message LRangeRequest { + string key = 1; + int64 start = 2; + int64 stop = 3; +} + +message ArrayResponse { + repeated bytes values = 1; +} + +message LLenRequest { + string key = 1; +} + +message LIndexRequest { + string key = 1; + int64 index = 2; +} + +message LSetRequest { + string key = 1; + int64 index = 2; + bytes value = 3; +} + +message LTrimRequest { + string key = 1; + int64 start = 2; + int64 stop = 3; +} + +message LInsertRequest { + string key = 1; + // insert before (true) or after (false) the pivot. + bool before = 2; + bytes pivot = 3; + bytes value = 4; +} + +message LRemRequest { + string key = 1; + // count > 0: remove from head; count < 0: remove from tail; 0: remove all. + int64 count = 2; + bytes value = 3; +} + +message LPosRequest { + string key = 1; + bytes value = 2; + // maximum number of positions to return. absent or 0 returns the first match. + optional uint32 count = 3; +} + +message LMoveRequest { + string source = 1; + string destination = 2; + // pop from the left (true) or right (false) of source. + bool src_left = 3; + // push to the left (true) or right (false) of destination. + bool dst_left = 4; +} + +// --------------------------------------------------------------------------- +// hashes +// --------------------------------------------------------------------------- + +message HSetRequest { + string key = 1; + repeated FieldValue fields = 2; +} + +message FieldValue { + string field = 1; + bytes value = 2; +} + +message HGetRequest { + string key = 1; + string field = 2; +} + +message HGetAllRequest { + string key = 1; +} + +message HashResponse { + repeated FieldValue fields = 1; +} + +message HDelRequest { + string key = 1; + repeated string fields = 2; +} + +message HExistsRequest { + string key = 1; + string field = 2; +} + +message HLenRequest { + string key = 1; +} + +message HIncrByRequest { + string key = 1; + string field = 2; + int64 delta = 3; +} + +message HKeysRequest { + string key = 1; +} + +message HValsRequest { + string key = 1; +} + +message HMGetRequest { + string key = 1; + repeated string fields = 2; +} + +message OptionalArrayResponse { + repeated OptionalValue values = 1; +} + +message HScanRequest { + string key = 1; + uint64 cursor = 2; + optional string pattern = 3; + // hint for how many fields to return per call. server may return more or fewer. + uint32 count = 4; +} + +message HScanResponse { + uint64 cursor = 1; + repeated FieldValue fields = 2; +} + +// --------------------------------------------------------------------------- +// sets +// --------------------------------------------------------------------------- + +message SAddRequest { + string key = 1; + repeated string members = 2; +} + +message SRemRequest { + string key = 1; + repeated string members = 2; +} + +message SMembersRequest { + string key = 1; +} + +message SIsMemberRequest { + string key = 1; + string member = 2; +} + +message SCardRequest { + string key = 1; +} + +message SUnionRequest { + repeated string keys = 1; +} + +message SInterRequest { + repeated string keys = 1; +} + +message SDiffRequest { + repeated string keys = 1; +} + +message SUnionStoreRequest { + string destination = 1; + repeated string keys = 2; +} + +message SInterStoreRequest { + string destination = 1; + repeated string keys = 2; +} + +message SDiffStoreRequest { + string destination = 1; + repeated string keys = 2; +} + +message SRandMemberRequest { + string key = 1; + // positive: return that many unique members; negative: allow repeats. + int32 count = 2; +} + +message SPopRequest { + string key = 1; + uint32 count = 2; +} + +message SMisMemberRequest { + string key = 1; + repeated string members = 2; +} + +message SScanRequest { + string key = 1; + uint64 cursor = 2; + optional string pattern = 3; + uint32 count = 4; +} + +message SScanResponse { + uint64 cursor = 1; + repeated string members = 2; +} + +// --------------------------------------------------------------------------- +// sorted sets +// --------------------------------------------------------------------------- + +message ZAddRequest { + string key = 1; + repeated ScoreMember members = 2; + bool nx = 3; + bool xx = 4; + bool gt = 5; + bool lt = 6; + bool ch = 7; +} + +message ScoreMember { + double score = 1; + string member = 2; +} + +message ZRemRequest { + string key = 1; + repeated string members = 2; +} + +message ZScoreRequest { + string key = 1; + string member = 2; +} + +message OptionalFloatResponse { + optional double value = 1; +} + +message ZRankRequest { + string key = 1; + string member = 2; +} + +message OptionalIntResponse { + optional int64 value = 1; +} + +message ZCardRequest { + string key = 1; +} + +message ZRangeRequest { + string key = 1; + int64 start = 2; + int64 stop = 3; + bool with_scores = 4; +} + +message ZRangeResponse { + // when with_scores is false, only member is populated. + repeated ScoreMember members = 1; +} + +message ZRevRankRequest { + string key = 1; + string member = 2; +} + +message ZRevRangeRequest { + string key = 1; + int64 start = 2; + int64 stop = 3; + bool with_scores = 4; +} + +message ZCountRequest { + string key = 1; + // min/max use redis score range syntax: "-inf", "+inf", "(5", "5". + string min = 2; + string max = 3; +} + +message ZIncrByRequest { + string key = 1; + double delta = 2; + string member = 3; +} + +message ZRangeByScoreRequest { + string key = 1; + string min = 2; + string max = 3; + optional int64 offset = 4; + optional int64 count = 5; + bool with_scores = 6; +} + +message ZRevRangeByScoreRequest { + string key = 1; + // note: max comes before min for reverse range queries. + string max = 2; + string min = 3; + optional int64 offset = 4; + optional int64 count = 5; + bool with_scores = 6; +} + +message ZPopMinRequest { + string key = 1; + uint32 count = 2; +} + +message ZPopMaxRequest { + string key = 1; + uint32 count = 2; +} + +message ZDiffRequest { + repeated string keys = 1; + bool with_scores = 2; +} + +message ZInterRequest { + repeated string keys = 1; + bool with_scores = 2; +} + +message ZUnionRequest { + repeated string keys = 1; + bool with_scores = 2; +} + +message ZScanRequest { + string key = 1; + uint64 cursor = 2; + optional string pattern = 3; + uint32 count = 4; +} + +message ZScanResponse { + uint64 cursor = 1; + repeated ScoreMember members = 2; +} + +// --------------------------------------------------------------------------- +// vectors +// --------------------------------------------------------------------------- + +enum VectorMetric { + VECTOR_METRIC_COSINE = 0; + VECTOR_METRIC_EUCLIDEAN = 1; + VECTOR_METRIC_INNER_PRODUCT = 2; +} + +enum VectorQuantization { + VECTOR_QUANTIZATION_NONE = 0; + VECTOR_QUANTIZATION_F16 = 1; + VECTOR_QUANTIZATION_I8 = 2; +} + +message VAddRequest { + string key = 1; + string element = 2; + // packed IEEE 754 floats — no parsing overhead. + repeated float vector = 3 [packed = true]; + VectorMetric metric = 4; + VectorQuantization quantization = 5; + optional uint32 connectivity = 6; + optional uint32 ef_construction = 7; +} + +message VAddBatchEntry { + string element = 1; + repeated float vector = 2 [packed = true]; +} + +message VAddBatchRequest { + string key = 1; + repeated VAddBatchEntry entries = 2; + VectorMetric metric = 3; + VectorQuantization quantization = 4; + optional uint32 connectivity = 5; + optional uint32 ef_construction = 6; +} + +message VSimRequest { + string key = 1; + repeated float query = 2 [packed = true]; + uint32 count = 3; + optional uint32 ef_search = 4; +} + +message VSimResponse { + repeated VSimResult results = 1; +} + +message VSimResult { + string element = 1; + float distance = 2; +} + +message VRemRequest { + string key = 1; + string element = 2; +} + +message VGetRequest { + string key = 1; + string element = 2; +} + +message VGetResponse { + optional bool exists = 1; + repeated float vector = 2 [packed = true]; +} + +message VCardRequest { + string key = 1; +} + +message VDimRequest { + string key = 1; +} + +message VInfoRequest { + string key = 1; +} + +message VInfoResponse { + bool exists = 1; + repeated FieldValue info = 2; +} + +// --------------------------------------------------------------------------- +// server +// --------------------------------------------------------------------------- + +message PingRequest { + optional string message = 1; +} + +message PingResponse { + string message = 1; +} + +message FlushDbRequest { + bool async = 1; +} + +message DbSizeRequest {} + +message InfoRequest { + optional string section = 1; +} + +message InfoResponse { + string info = 1; +} + +message EchoRequest { + string message = 1; +} + +message EchoResponse { + string message = 1; +} + +message DecrRequest { + string key = 1; +} + +message UnlinkRequest { + repeated string keys = 1; +} + +message BgSaveRequest {} + +message BgRewriteAofRequest {} + +message TimeRequest {} + +message TimeResponse { + int64 seconds = 1; + int64 microseconds = 2; +} + +message LastSaveRequest {} + +// --------------------------------------------------------------------------- +// slowlog +// --------------------------------------------------------------------------- + +message SlowLogGetRequest { + optional uint32 count = 1; +} + +message SlowLogGetResponse { + repeated SlowLogEntry entries = 1; +} + +message SlowLogEntry { + uint64 id = 1; + uint64 timestamp_unix = 2; + uint64 duration_micros = 3; + string command = 4; +} + +message SlowLogLenRequest {} + +message SlowLogResetRequest {} + +// --------------------------------------------------------------------------- +// pub/sub +// --------------------------------------------------------------------------- + +message PublishRequest { + string channel = 1; + bytes message = 2; +} + +message SubscribeRequest { + repeated string channels = 1; + repeated string patterns = 2; +} + +message SubscribeEvent { + // "message" for exact channel match, "pmessage" for pattern match. + string kind = 1; + string channel = 2; + bytes data = 3; + // the pattern that matched (only set for pmessage). + optional string pattern = 4; +} + +message PubSubChannelsRequest { + optional string pattern = 1; +} + +message PubSubNumSubRequest { + repeated string channels = 1; +} + +message PubSubNumSubResponse { + repeated ChannelCount counts = 1; +} + +message PubSubNumPatRequest {} + +message ChannelCount { + string channel = 1; + int64 count = 2; +} + +// --------------------------------------------------------------------------- +// pipeline (bidirectional streaming) +// --------------------------------------------------------------------------- + +message PipelineRequest { + uint64 id = 1; + oneof command { + GetRequest get = 2; + SetRequest set = 3; + DelRequest del = 4; + ExistsRequest exists = 5; + IncrRequest incr = 6; + IncrByRequest incr_by = 7; + DecrByRequest decr_by = 8; + IncrByFloatRequest incr_by_float = 9; + AppendRequest append = 10; + StrlenRequest strlen = 11; + ExpireRequest expire = 12; + PExpireRequest pexpire = 13; + PersistRequest persist = 14; + TtlRequest ttl = 15; + PTtlRequest pttl = 16; + TypeRequest type = 17; + LPushRequest lpush = 18; + RPushRequest rpush = 19; + LPopRequest lpop = 20; + RPopRequest rpop = 21; + LRangeRequest lrange = 22; + LLenRequest llen = 23; + HSetRequest hset = 24; + HGetRequest hget = 25; + HGetAllRequest hgetall = 26; + HDelRequest hdel = 27; + HExistsRequest hexists = 28; + HLenRequest hlen = 29; + HIncrByRequest hincr_by = 30; + HKeysRequest hkeys = 31; + HValsRequest hvals = 32; + HMGetRequest hmget = 33; + SAddRequest sadd = 34; + SRemRequest srem = 35; + SMembersRequest smembers = 36; + SIsMemberRequest sismember = 37; + SCardRequest scard = 38; + ZAddRequest zadd = 39; + ZRemRequest zrem = 40; + ZScoreRequest zscore = 41; + ZRankRequest zrank = 42; + ZCardRequest zcard = 43; + ZRangeRequest zrange = 44; + VAddRequest vadd = 45; + VSimRequest vsim = 46; + VRemRequest vrem = 47; + VGetRequest vget = 48; + VCardRequest vcard = 49; + VDimRequest vdim = 50; + VInfoRequest vinfo = 51; + PingRequest ping = 52; + FlushDbRequest flushdb = 53; + DbSizeRequest dbsize = 54; + MGetRequest mget = 55; + MSetRequest mset = 56; + KeysRequest keys = 57; + RenameRequest rename = 58; + ScanRequest scan = 59; + EchoRequest echo = 60; + DecrRequest decr = 61; + UnlinkRequest unlink = 62; + BgSaveRequest bgsave = 63; + BgRewriteAofRequest bgrewriteaof = 64; + SlowLogGetRequest slowlog_get = 65; + SlowLogLenRequest slowlog_len = 66; + SlowLogResetRequest slowlog_reset = 67; + PublishRequest publish = 68; + PubSubChannelsRequest pubsub_channels = 69; + PubSubNumSubRequest pubsub_numsub = 70; + PubSubNumPatRequest pubsub_numpat = 71; + VAddBatchRequest vadd_batch = 72; + + // extended strings + GetDelRequest get_del = 73; + GetExRequest get_ex = 74; + GetRangeRequest get_range = 75; + SetRangeRequest set_range = 76; + + // extended keys + CopyRequest copy = 77; + RandomKeyRequest random_key = 78; + TouchRequest touch = 79; + + // extended lists + LIndexRequest lindex = 80; + LSetRequest lset = 81; + LTrimRequest ltrim = 82; + LInsertRequest linsert = 83; + LRemRequest lrem = 84; + LPosRequest lpos = 85; + LMoveRequest lmove = 86; + + // extended sets + SUnionRequest sunion = 87; + SInterRequest sinter = 88; + SDiffRequest sdiff = 89; + SUnionStoreRequest sunion_store = 90; + SInterStoreRequest sinter_store = 91; + SDiffStoreRequest sdiff_store = 92; + SRandMemberRequest srand_member = 93; + SPopRequest spop = 94; + SMisMemberRequest smismember = 95; + + // extended hashes + HScanRequest hscan = 96; + + // extended sorted sets + ZRevRankRequest zrev_rank = 97; + ZRevRangeRequest zrev_range = 98; + ZCountRequest zcount = 99; + ZIncrByRequest zincrby = 100; + ZRangeByScoreRequest zrange_by_score = 101; + ZRevRangeByScoreRequest zrev_range_by_score = 102; + ZPopMinRequest zpopmin = 103; + ZPopMaxRequest zpopmax = 104; + ZDiffRequest zdiff = 105; + ZInterRequest zinter = 106; + ZUnionRequest zunion = 107; + ZScanRequest zscan = 108; + + // scans + SScanRequest sscan = 109; + + // extended server + TimeRequest time = 110; + LastSaveRequest last_save = 111; + } +} + +message PipelineResponse { + uint64 id = 1; + oneof result { + GetResponse get = 2; + SetResponse set = 3; + DelResponse del = 4; + IntResponse int_val = 5; + BoolResponse bool_val = 6; + FloatResponse float_val = 7; + StatusResponse status = 8; + TtlResponse ttl = 9; + TypeResponse type = 10; + ArrayResponse array = 11; + HashResponse hash = 12; + OptionalArrayResponse optional_array = 13; + KeysResponse keys = 14; + ScanResponse scan = 15; + OptionalFloatResponse optional_float = 16; + OptionalIntResponse optional_int = 17; + ZRangeResponse zrange = 18; + VSimResponse vsim = 19; + VGetResponse vget = 20; + VInfoResponse vinfo = 21; + MGetResponse mget = 22; + MSetResponse mset = 23; + PingResponse ping = 24; + ErrorResponse error = 25; + InfoResponse info = 26; + EchoResponse echo = 27; + SlowLogGetResponse slowlog_get = 28; + PubSubNumSubResponse pubsub_numsub = 29; + BoolArrayResponse bool_array = 30; + HScanResponse hscan = 31; + ZScanResponse zscan = 32; + SScanResponse sscan = 33; + TimeResponse time_resp = 34; + } +} + +message ErrorResponse { + string message = 1; + ErrorKind kind = 2; +} + +enum ErrorKind { + ERROR_KIND_UNSPECIFIED = 0; + ERROR_KIND_WRONG_TYPE = 1; + ERROR_KIND_OUT_OF_MEMORY = 2; + ERROR_KIND_INTERNAL = 3; + ERROR_KIND_INVALID_ARGUMENT = 4; +} diff --git a/clients/ember-ts/src/client.ts b/clients/ember-ts/src/client.ts new file mode 100644 index 00000000..afb17733 --- /dev/null +++ b/clients/ember-ts/src/client.ts @@ -0,0 +1,1410 @@ +import * as grpc from '@grpc/grpc-js'; +import * as protoLoader from '@grpc/proto-loader'; +import path from 'path'; + +import type { + ClientOptions, + SetOptions, + GetExOptions, + ScanOptions, + ZAddOptions, + ZRangeByScoreOptions, + VAddOptions, + VAddBatchOptions, + VAddBatchEntry, + VSimOptions, + ScoreMember, + VSimResult, + SlowLogEntry, + SubscribeEvent, + ScanPage, + HScanPage, + ZScanPage, + SScanPage, + TimeResult, + VGetResult, + VInfoResult, +} from './types'; + +// --------------------------------------------------------------------------- +// proto loading — done once, cached for the lifetime of the process +// --------------------------------------------------------------------------- + +let _stubCtor: grpc.ServiceClientConstructor | undefined; + +function loadStub(): grpc.ServiceClientConstructor { + if (_stubCtor) return _stubCtor; + + const protoPath = path.join(__dirname, '../proto/ember/v1/ember.proto'); + const pkgDef = protoLoader.loadSync(protoPath, { + keepCase: false, + longs: Number, + enums: String, + defaults: true, + oneofs: true, + }); + + const pkg = grpc.loadPackageDefinition(pkgDef) as any; + _stubCtor = pkg.ember.v1.EmberCache as grpc.ServiceClientConstructor; + return _stubCtor; +} + +// --------------------------------------------------------------------------- +// client +// --------------------------------------------------------------------------- + +/** + * A gRPC client for the ember cache server. + * + * All methods return Promises and throw on error. Pub/sub streaming is + * exposed as an `AsyncIterable` so you can use `for await` naturally. + * + * @example + * ```ts + * const client = new EmberClient('localhost:6380'); + * await client.set('greeting', 'hello'); + * const val = await client.get('greeting'); + * console.log(val?.toString()); // "hello" + * client.close(); + * ``` + */ +export class EmberClient { + private readonly stub: InstanceType; + private readonly meta: grpc.Metadata; + + /** + * @param address - `host:port` of the ember server. defaults to `localhost:6380`. + * @param options - optional client configuration. + */ + constructor(address = 'localhost:6380', options: ClientOptions = {}) { + const Ctor = loadStub(); + this.stub = new Ctor(address, grpc.credentials.createInsecure()); + this.meta = new grpc.Metadata(); + if (options.password) { + this.meta.set('authorization', options.password); + } + } + + /** closes the underlying gRPC connection. */ + close(): void { + this.stub.close(); + } + + // wraps a unary gRPC call in a Promise + private call(method: string, req: object): Promise { + return new Promise((resolve, reject) => { + (this.stub as any)[method](req, this.meta, (err: Error | null, res: T) => { + if (err) reject(err); + else resolve(res); + }); + }); + } + + // wraps a server-streaming RPC as an AsyncIterable + private stream(method: string, req: object): AsyncIterable { + return { + [Symbol.asyncIterator]: () => { + const call = (this.stub as any)[method](req, this.meta) as grpc.ClientReadableStream; + + // buffer events that arrive before the next() caller is ready + const queue: Array<{ value?: T; error?: Error; done?: true }> = []; + let waiter: { + resolve: (v: IteratorResult) => void; + reject: (e: Error) => void; + } | null = null; + + const enqueue = (item: { value?: T; error?: Error; done?: true }) => { + if (waiter) { + const w = waiter; + waiter = null; + if (item.error) w.reject(item.error); + else w.resolve({ value: item.value as T, done: !!item.done }); + } else { + queue.push(item); + } + }; + + call.on('data', (v: T) => enqueue({ value: v })); + call.on('end', () => enqueue({ done: true })); + call.on('error', (err: Error) => enqueue({ error: err })); + + return { + next(): Promise> { + if (queue.length > 0) { + const item = queue.shift()!; + if (item.error) return Promise.reject(item.error); + return Promise.resolve({ value: item.value as T, done: !!item.done }); + } + return new Promise>((resolve, reject) => { + waiter = { resolve, reject }; + }); + }, + return(): Promise> { + call.cancel(); + return Promise.resolve({ value: undefined as unknown as T, done: true }); + }, + }; + }, + }; + } + + // --------------------------------------------------------------------------- + // strings + // --------------------------------------------------------------------------- + + /** + * Returns the value for a key, or `null` if the key does not exist. + */ + async get(key: string): Promise { + const res = await this.call<{ value?: Buffer }>('get', { key }); + return res.value ?? null; + } + + /** + * Stores a key-value pair. Returns `true` if the key was set. + * + * NX/XX conditions: if the condition is not met, returns `false` without + * modifying the key. + * + * @example + * ```ts + * await client.set('counter', '0', { ex: 60 }); // expires in 60 seconds + * await client.set('lock', '1', { nx: true }); // only if absent + * ``` + */ + async set(key: string, value: Buffer | string, opts: SetOptions = {}): Promise { + const req: Record = { + key, + value: Buffer.isBuffer(value) ? value : Buffer.from(value), + }; + if (opts.ex) req.expireSeconds = opts.ex; + if (opts.px) req.expireMillis = opts.px; + if (opts.nx) req.nx = true; + if (opts.xx) req.xx = true; + const res = await this.call<{ ok: boolean }>('set', req); + return res.ok; + } + + /** + * Removes one or more keys. Returns the number of keys deleted. + */ + async del(...keys: string[]): Promise { + const res = await this.call<{ deleted: number }>('del', { keys }); + return res.deleted; + } + + /** + * Returns values for multiple keys in one round-trip. + * Missing keys have `null` at their position. + */ + async mGet(keys: string[]): Promise<(Buffer | null)[]> { + const res = await this.call<{ values: Array<{ value?: Buffer }> }>('mGet', { keys }); + return res.values.map(v => v.value ?? null); + } + + /** + * Sets multiple key-value pairs atomically. + */ + async mSet(entries: Record): Promise { + const pairs = Object.entries(entries).map(([key, value]) => ({ + key, + value: Buffer.isBuffer(value) ? value : Buffer.from(value), + })); + await this.call('mSet', { pairs }); + } + + /** + * Increments a key by 1 and returns the new value. + * Creates the key with value `0` before incrementing if it does not exist. + */ + async incr(key: string): Promise { + const res = await this.call<{ value: number }>('incr', { key }); + return res.value; + } + + /** + * Increments a key by `delta` and returns the new value. + */ + async incrBy(key: string, delta: number): Promise { + const res = await this.call<{ value: number }>('incrBy', { key, delta }); + return res.value; + } + + /** + * Decrements a key by `delta` and returns the new value. + */ + async decrBy(key: string, delta: number): Promise { + const res = await this.call<{ value: number }>('decrBy', { key, delta }); + return res.value; + } + + /** + * Decrements a key by 1 and returns the new value. + */ + async decr(key: string): Promise { + const res = await this.call<{ value: number }>('decr', { key }); + return res.value; + } + + /** + * Increments a key by a floating-point `delta` and returns the new value. + */ + async incrByFloat(key: string, delta: number): Promise { + const res = await this.call<{ value: string }>('incrByFloat', { key, delta }); + return parseFloat(res.value); + } + + /** + * Appends `value` to the string at `key`. Returns the new string length. + */ + async append(key: string, value: Buffer | string): Promise { + const res = await this.call<{ value: number }>('append', { + key, + value: Buffer.isBuffer(value) ? value : Buffer.from(value), + }); + return res.value; + } + + /** + * Returns the byte length of the string at `key`. Returns `0` if the key does not exist. + */ + async strlen(key: string): Promise { + const res = await this.call<{ value: number }>('strlen', { key }); + return res.value; + } + + /** + * Atomically gets and deletes a key. Returns `null` if the key did not exist. + */ + async getDel(key: string): Promise { + const res = await this.call<{ value?: Buffer }>('getDel', { key }); + return res.value ?? null; + } + + /** + * Gets a key and optionally updates its expiry in the same round-trip. + * Pass `{ persist: true }` to remove the expiry. + */ + async getEx(key: string, opts: GetExOptions = {}): Promise { + const req: Record = { key }; + if (opts.ex) req.expireSeconds = opts.ex; + if (opts.px) req.expireMillis = opts.px; + if (opts.persist) req.persist = true; + const res = await this.call<{ value?: Buffer }>('getEx', req); + return res.value ?? null; + } + + /** + * Returns the substring of the string at `key` for the byte range [start, end]. + * Negative indices count from the end of the string. + */ + async getRange(key: string, start: number, end: number): Promise { + const res = await this.call<{ value?: Buffer }>('getRange', { key, start, end }); + return res.value ?? Buffer.alloc(0); + } + + /** + * Overwrites part of the string at `key` starting at byte `offset`. + * Returns the new string length. + */ + async setRange(key: string, offset: number, value: Buffer | string): Promise { + const res = await this.call<{ value: number }>('setRange', { + key, + offset, + value: Buffer.isBuffer(value) ? value : Buffer.from(value), + }); + return res.value; + } + + // --------------------------------------------------------------------------- + // keys + // --------------------------------------------------------------------------- + + /** + * Returns the number of the given keys that exist. + * A key specified multiple times is counted multiple times. + */ + async exists(...keys: string[]): Promise { + const res = await this.call<{ value: number }>('exists', { keys }); + return res.value; + } + + /** + * Sets a timeout on a key in seconds. Returns `true` if the timeout was set. + */ + async expire(key: string, seconds: number): Promise { + const res = await this.call<{ value: boolean }>('expire', { key, seconds }); + return res.value; + } + + /** + * Sets a timeout on a key in milliseconds. Returns `true` if the timeout was set. + */ + async pExpire(key: string, milliseconds: number): Promise { + const res = await this.call<{ value: boolean }>('pExpire', { key, milliseconds }); + return res.value; + } + + /** + * Removes the expiry from a key, making it persistent. + * Returns `true` if the timeout was removed, `false` if the key has no expiry. + */ + async persist(key: string): Promise { + const res = await this.call<{ value: boolean }>('persist', { key }); + return res.value; + } + + /** + * Returns the remaining time to live in seconds. + * Returns `-1` if the key has no expiry, `-2` if the key does not exist. + */ + async ttl(key: string): Promise { + const res = await this.call<{ value: number }>('ttl', { key }); + return res.value; + } + + /** + * Returns the remaining time to live in milliseconds. + * Returns `-1` if the key has no expiry, `-2` if the key does not exist. + */ + async pTtl(key: string): Promise { + const res = await this.call<{ value: number }>('pTtl', { key }); + return res.value; + } + + /** + * Returns the data type stored at `key`: `"string"`, `"list"`, `"set"`, + * `"zset"`, `"hash"`, or `"none"` if the key does not exist. + */ + async type(key: string): Promise { + const res = await this.call<{ typeName: string }>('type', { key }); + return res.typeName; + } + + /** + * Returns all keys matching `pattern`. Supports glob-style patterns: + * `*` matches any sequence, `?` matches any single character, `[abc]` matches a character set. + * + * Avoid running KEYS in production on large datasets — use SCAN instead. + */ + async keys(pattern: string): Promise { + const res = await this.call<{ keys: string[] }>('keys', { pattern }); + return res.keys; + } + + /** + * Renames `key` to `newKey`. Throws if `key` does not exist. + */ + async rename(key: string, newKey: string): Promise { + await this.call('rename', { key, newKey }); + } + + /** + * Iterates over the keyspace one page at a time. + * Start with cursor `0`; the scan is complete when the returned cursor is `0`. + * + * @example + * ```ts + * let cursor = 0; + * do { + * const page = await client.scan(cursor, { pattern: 'user:*', count: 100 }); + * cursor = page.cursor; + * for (const key of page.keys) console.log(key); + * } while (cursor !== 0); + * ``` + */ + async scan(cursor: number, opts: ScanOptions = {}): Promise { + const req: Record = { cursor, count: opts.count ?? 0 }; + if (opts.pattern != null) req.pattern = opts.pattern; + const res = await this.call<{ cursor: number; keys: string[] }>('scan', req); + return { cursor: res.cursor, keys: res.keys }; + } + + /** + * Copies `source` to `destination`. Pass `replace: true` to overwrite an existing key. + * Returns `true` if the key was copied. + */ + async copy(source: string, destination: string, replace = false): Promise { + const res = await this.call<{ value: boolean }>('copy', { source, destination, replace }); + return res.value; + } + + /** + * Returns a random key from the keyspace, or `null` if the database is empty. + */ + async randomKey(): Promise { + const res = await this.call<{ value?: Buffer }>('randomKey', {}); + return res.value ? res.value.toString() : null; + } + + /** + * Updates the last-access time for the given keys without changing their values. + * Returns the number of keys that exist. + */ + async touch(...keys: string[]): Promise { + const res = await this.call<{ value: number }>('touch', { keys }); + return res.value; + } + + /** + * Removes keys asynchronously (background deallocation). + * Returns the number of keys removed. + */ + async unlink(...keys: string[]): Promise { + const res = await this.call<{ deleted: number }>('unlink', { keys }); + return res.deleted; + } + + // --------------------------------------------------------------------------- + // lists + // --------------------------------------------------------------------------- + + /** + * Prepends one or more values to a list. Returns the new list length. + */ + async lPush(key: string, ...values: (Buffer | string)[]): Promise { + const res = await this.call<{ value: number }>('lPush', { + key, + values: values.map(v => (Buffer.isBuffer(v) ? v : Buffer.from(v))), + }); + return res.value; + } + + /** + * Appends one or more values to a list. Returns the new list length. + */ + async rPush(key: string, ...values: (Buffer | string)[]): Promise { + const res = await this.call<{ value: number }>('rPush', { + key, + values: values.map(v => (Buffer.isBuffer(v) ? v : Buffer.from(v))), + }); + return res.value; + } + + /** + * Removes and returns the first element of a list. + * Returns `null` if the list is empty or does not exist. + */ + async lPop(key: string): Promise { + const res = await this.call<{ value?: Buffer }>('lPop', { key }); + return res.value ?? null; + } + + /** + * Removes and returns the last element of a list. + * Returns `null` if the list is empty or does not exist. + */ + async rPop(key: string): Promise { + const res = await this.call<{ value?: Buffer }>('rPop', { key }); + return res.value ?? null; + } + + /** + * Returns the elements in the range [start, stop]. + * Negative indices count from the tail: `-1` is the last element. + */ + async lRange(key: string, start: number, stop: number): Promise { + const res = await this.call<{ values: Buffer[] }>('lRange', { key, start, stop }); + return res.values; + } + + /** + * Returns the number of elements in a list. + */ + async lLen(key: string): Promise { + const res = await this.call<{ value: number }>('lLen', { key }); + return res.value; + } + + /** + * Returns the element at `index`. Negative indices count from the tail. + * Returns `null` if the index is out of range. + */ + async lIndex(key: string, index: number): Promise { + const res = await this.call<{ value?: Buffer }>('lIndex', { key, index }); + return res.value ?? null; + } + + /** + * Sets the element at `index` to `value`. Throws if the index is out of range. + */ + async lSet(key: string, index: number, value: Buffer | string): Promise { + await this.call('lSet', { + key, + index, + value: Buffer.isBuffer(value) ? value : Buffer.from(value), + }); + } + + /** + * Trims the list so it only contains elements in [start, stop]. + */ + async lTrim(key: string, start: number, stop: number): Promise { + await this.call('lTrim', { key, start, stop }); + } + + /** + * Inserts `value` before or after the first occurrence of `pivot` in the list. + * Returns the new list length, or `-1` if `pivot` was not found. + */ + async lInsert( + key: string, + before: boolean, + pivot: Buffer | string, + value: Buffer | string, + ): Promise { + const res = await this.call<{ value: number }>('lInsert', { + key, + before, + pivot: Buffer.isBuffer(pivot) ? pivot : Buffer.from(pivot), + value: Buffer.isBuffer(value) ? value : Buffer.from(value), + }); + return res.value; + } + + /** + * Removes occurrences of `value` from the list. + * `count > 0`: remove from head; `count < 0`: remove from tail; `0`: remove all. + * Returns the number of elements removed. + */ + async lRem(key: string, count: number, value: Buffer | string): Promise { + const res = await this.call<{ value: number }>('lRem', { + key, + count, + value: Buffer.isBuffer(value) ? value : Buffer.from(value), + }); + return res.value; + } + + /** + * Returns the first index of `value` in the list, or `null` if not found. + * Pass `count` to find the first N occurrences (returns the first match only when absent). + */ + async lPos(key: string, value: Buffer | string, count?: number): Promise { + const req: Record = { + key, + value: Buffer.isBuffer(value) ? value : Buffer.from(value), + }; + if (count != null) req.count = count; + const res = await this.call<{ value?: number }>('lPos', req); + return res.value ?? null; + } + + /** + * Atomically pops an element from `source` and pushes it to `destination`. + * Pass `srcLeft: true` to pop from the head of source, + * `dstLeft: true` to push to the head of destination. + * Returns the moved element, or `null` if `source` is empty. + */ + async lMove( + source: string, + destination: string, + srcLeft: boolean, + dstLeft: boolean, + ): Promise { + const res = await this.call<{ value?: Buffer }>('lMove', { + source, + destination, + srcLeft, + dstLeft, + }); + return res.value ?? null; + } + + // --------------------------------------------------------------------------- + // hashes + // --------------------------------------------------------------------------- + + /** + * Sets one or more fields in a hash. Returns the number of new fields added. + * + * @example + * ```ts + * await client.hSet('user:1', { name: 'alice', email: 'alice@example.com' }); + * ``` + */ + async hSet(key: string, fields: Record): Promise { + const fieldValues = Object.entries(fields).map(([field, value]) => ({ + field, + value: Buffer.isBuffer(value) ? value : Buffer.from(value), + })); + const res = await this.call<{ value: number }>('hSet', { key, fields: fieldValues }); + return res.value; + } + + /** + * Returns the value of a field in a hash, or `null` if the field does not exist. + */ + async hGet(key: string, field: string): Promise { + const res = await this.call<{ value?: Buffer }>('hGet', { key, field }); + return res.value ?? null; + } + + /** + * Returns all fields and values in a hash as a plain object. + */ + async hGetAll(key: string): Promise> { + const res = await this.call<{ fields: Array<{ field: string; value: Buffer }> }>( + 'hGetAll', + { key }, + ); + const result: Record = {}; + for (const fv of res.fields) { + result[fv.field] = fv.value; + } + return result; + } + + /** + * Removes fields from a hash. Returns the number of fields deleted. + */ + async hDel(key: string, ...fields: string[]): Promise { + const res = await this.call<{ value: number }>('hDel', { key, fields }); + return res.value; + } + + /** + * Returns `true` if a field exists in a hash. + */ + async hExists(key: string, field: string): Promise { + const res = await this.call<{ value: boolean }>('hExists', { key, field }); + return res.value; + } + + /** + * Returns the number of fields in a hash. + */ + async hLen(key: string): Promise { + const res = await this.call<{ value: number }>('hLen', { key }); + return res.value; + } + + /** + * Returns all field names in a hash. + */ + async hKeys(key: string): Promise { + const res = await this.call<{ keys: string[] }>('hKeys', { key }); + return res.keys; + } + + /** + * Returns all field values in a hash. + */ + async hVals(key: string): Promise { + const res = await this.call<{ values: Buffer[] }>('hVals', { key }); + return res.values; + } + + /** + * Returns values for the specified fields in a hash. + * Missing fields have `null` at their position. + */ + async hmGet(key: string, fields: string[]): Promise<(Buffer | null)[]> { + const res = await this.call<{ values: Array<{ value?: Buffer }> }>('hmGet', { key, fields }); + return res.values.map(v => v.value ?? null); + } + + /** + * Increments the integer value of a hash field by `delta`. Returns the new value. + */ + async hIncrBy(key: string, field: string, delta: number): Promise { + const res = await this.call<{ value: number }>('hIncrBy', { key, field, delta }); + return res.value; + } + + /** + * Iterates over fields in a hash. Start with cursor `0`; done when the + * returned cursor is `0`. + */ + async hScan(key: string, cursor: number, opts: ScanOptions = {}): Promise { + const req: Record = { key, cursor, count: opts.count ?? 0 }; + if (opts.pattern != null) req.pattern = opts.pattern; + const res = await this.call<{ + cursor: number; + fields: Array<{ field: string; value: Buffer }>; + }>('hScan', req); + const fields: Record = {}; + for (const fv of res.fields) { + fields[fv.field] = fv.value; + } + return { cursor: res.cursor, fields }; + } + + // --------------------------------------------------------------------------- + // sets + // --------------------------------------------------------------------------- + + /** + * Adds members to a set. Returns the number of new members added. + */ + async sAdd(key: string, ...members: string[]): Promise { + const res = await this.call<{ value: number }>('sAdd', { key, members }); + return res.value; + } + + /** + * Removes members from a set. Returns the number of members removed. + */ + async sRem(key: string, ...members: string[]): Promise { + const res = await this.call<{ value: number }>('sRem', { key, members }); + return res.value; + } + + /** + * Returns all members of a set. + */ + async sMembers(key: string): Promise { + const res = await this.call<{ keys: string[] }>('sMembers', { key }); + return res.keys; + } + + /** + * Returns `true` if `member` belongs to the set at `key`. + */ + async sIsMember(key: string, member: string): Promise { + const res = await this.call<{ value: boolean }>('sIsMember', { key, member }); + return res.value; + } + + /** + * Returns the number of members in a set. + */ + async sCard(key: string): Promise { + const res = await this.call<{ value: number }>('sCard', { key }); + return res.value; + } + + /** + * Returns the union of two or more sets. + */ + async sUnion(...keys: string[]): Promise { + const res = await this.call<{ keys: string[] }>('sUnion', { keys }); + return res.keys; + } + + /** + * Returns the intersection of two or more sets. + */ + async sInter(...keys: string[]): Promise { + const res = await this.call<{ keys: string[] }>('sInter', { keys }); + return res.keys; + } + + /** + * Returns the members in the first set that are not in any of the subsequent sets. + */ + async sDiff(...keys: string[]): Promise { + const res = await this.call<{ keys: string[] }>('sDiff', { keys }); + return res.keys; + } + + /** + * Stores the union of sets at `destination`. Returns the number of elements stored. + */ + async sUnionStore(destination: string, ...keys: string[]): Promise { + const res = await this.call<{ value: number }>('sUnionStore', { destination, keys }); + return res.value; + } + + /** + * Stores the intersection of sets at `destination`. Returns the number of elements stored. + */ + async sInterStore(destination: string, ...keys: string[]): Promise { + const res = await this.call<{ value: number }>('sInterStore', { destination, keys }); + return res.value; + } + + /** + * Stores the difference of sets at `destination`. Returns the number of elements stored. + */ + async sDiffStore(destination: string, ...keys: string[]): Promise { + const res = await this.call<{ value: number }>('sDiffStore', { destination, keys }); + return res.value; + } + + /** + * Returns `count` random members from a set. + * `count > 0` returns unique members; `count < 0` allows duplicates. + */ + async sRandMember(key: string, count: number): Promise { + const res = await this.call<{ values: Buffer[] }>('sRandMember', { key, count }); + return res.values.map(v => v.toString()); + } + + /** + * Removes and returns `count` random members from a set. + */ + async sPop(key: string, count: number): Promise { + const res = await this.call<{ values: Buffer[] }>('sPop', { key, count }); + return res.values.map(v => v.toString()); + } + + /** + * Returns a boolean for each member indicating whether it belongs to the set. + */ + async sMisMember(key: string, ...members: string[]): Promise { + const res = await this.call<{ values: boolean[] }>('sMisMember', { key, members }); + return res.values; + } + + /** + * Iterates over members of a set. Start with cursor `0`; done when the + * returned cursor is `0`. + */ + async sScan(key: string, cursor: number, opts: ScanOptions = {}): Promise { + const req: Record = { key, cursor, count: opts.count ?? 0 }; + if (opts.pattern != null) req.pattern = opts.pattern; + const res = await this.call<{ cursor: number; members: string[] }>('sScan', req); + return { cursor: res.cursor, members: res.members }; + } + + // --------------------------------------------------------------------------- + // sorted sets + // --------------------------------------------------------------------------- + + /** + * Adds members to a sorted set. Returns the number added + * (or changed when `ch: true`). + * + * @example + * ```ts + * await client.zAdd('leaderboard', [ + * { member: 'alice', score: 9500 }, + * { member: 'bob', score: 8200 }, + * ]); + * ``` + */ + async zAdd(key: string, members: ScoreMember[], opts: ZAddOptions = {}): Promise { + const req: Record = { + key, + members: members.map(m => ({ score: m.score, member: m.member })), + }; + if (opts.nx) req.nx = true; + if (opts.xx) req.xx = true; + if (opts.gt) req.gt = true; + if (opts.lt) req.lt = true; + if (opts.ch) req.ch = true; + const res = await this.call<{ value: number }>('zAdd', req); + return res.value; + } + + /** + * Removes members from a sorted set. Returns the number removed. + */ + async zRem(key: string, ...members: string[]): Promise { + const res = await this.call<{ value: number }>('zRem', { key, members }); + return res.value; + } + + /** + * Returns the score of a member, or `null` if the member does not exist. + */ + async zScore(key: string, member: string): Promise { + const res = await this.call<{ value?: number }>('zScore', { key, member }); + return res.value ?? null; + } + + /** + * Returns the 0-based rank of a member (sorted ascending by score), + * or `null` if the member does not exist. + */ + async zRank(key: string, member: string): Promise { + const res = await this.call<{ value?: number }>('zRank', { key, member }); + return res.value ?? null; + } + + /** + * Returns the reverse rank of a member (rank 0 = highest score), + * or `null` if the member does not exist. + */ + async zRevRank(key: string, member: string): Promise { + const res = await this.call<{ value?: number }>('zRevRank', { key, member }); + return res.value ?? null; + } + + /** + * Returns the number of members in a sorted set. + */ + async zCard(key: string): Promise { + const res = await this.call<{ value: number }>('zCard', { key }); + return res.value; + } + + /** + * Returns members by rank in ascending order. Pass `withScores: true` to + * include scores (always populated in the result regardless, but only + * meaningful when requested). + */ + async zRange(key: string, start: number, stop: number, withScores = false): Promise { + const res = await this.call<{ members: Array<{ score: number; member: string }> }>('zRange', { + key, start, stop, withScores, + }); + return res.members.map(m => ({ member: m.member, score: m.score })); + } + + /** + * Returns members by rank in descending order. + */ + async zRevRange(key: string, start: number, stop: number, withScores = false): Promise { + const res = await this.call<{ members: Array<{ score: number; member: string }> }>('zRevRange', { + key, start, stop, withScores, + }); + return res.members.map(m => ({ member: m.member, score: m.score })); + } + + /** + * Returns the count of members with scores in the range [min, max]. + * Supports redis score range syntax: `"-inf"`, `"+inf"`, `"(5"` (exclusive), `"5"`. + */ + async zCount(key: string, min: string, max: string): Promise { + const res = await this.call<{ value: number }>('zCount', { key, min, max }); + return res.value; + } + + /** + * Increments the score of `member` by `delta`. Returns the new score. + */ + async zIncrBy(key: string, delta: number, member: string): Promise { + const res = await this.call<{ value: string }>('zIncrBy', { key, delta, member }); + return parseFloat(res.value); + } + + /** + * Returns members with scores in [min, max] in ascending order. + * Supports redis score range syntax. + */ + async zRangeByScore( + key: string, + min: string, + max: string, + opts: ZRangeByScoreOptions = {}, + ): Promise { + const req: Record = { key, min, max, withScores: opts.withScores ?? false }; + if (opts.offset != null) req.offset = opts.offset; + if (opts.count != null) req.count = opts.count; + const res = await this.call<{ members: Array<{ score: number; member: string }> }>( + 'zRangeByScore', req, + ); + return res.members.map(m => ({ member: m.member, score: m.score })); + } + + /** + * Returns members with scores in [min, max] in descending order. + * Note: `max` comes before `min` for reverse range queries. + */ + async zRevRangeByScore( + key: string, + max: string, + min: string, + opts: ZRangeByScoreOptions = {}, + ): Promise { + const req: Record = { key, max, min, withScores: opts.withScores ?? false }; + if (opts.offset != null) req.offset = opts.offset; + if (opts.count != null) req.count = opts.count; + const res = await this.call<{ members: Array<{ score: number; member: string }> }>( + 'zRevRangeByScore', req, + ); + return res.members.map(m => ({ member: m.member, score: m.score })); + } + + /** + * Removes and returns up to `count` members with the lowest scores. + */ + async zPopMin(key: string, count = 1): Promise { + const res = await this.call<{ members: Array<{ score: number; member: string }> }>( + 'zPopMin', { key, count }, + ); + return res.members.map(m => ({ member: m.member, score: m.score })); + } + + /** + * Removes and returns up to `count` members with the highest scores. + */ + async zPopMax(key: string, count = 1): Promise { + const res = await this.call<{ members: Array<{ score: number; member: string }> }>( + 'zPopMax', { key, count }, + ); + return res.members.map(m => ({ member: m.member, score: m.score })); + } + + /** + * Returns members that appear in the first key but not in any subsequent key. + */ + async zDiff(keys: string[], withScores = false): Promise { + const res = await this.call<{ members: Array<{ score: number; member: string }> }>( + 'zDiff', { keys, withScores }, + ); + return res.members.map(m => ({ member: m.member, score: m.score })); + } + + /** + * Returns members that appear in all of the given sorted sets. + */ + async zInter(keys: string[], withScores = false): Promise { + const res = await this.call<{ members: Array<{ score: number; member: string }> }>( + 'zInter', { keys, withScores }, + ); + return res.members.map(m => ({ member: m.member, score: m.score })); + } + + /** + * Returns the union of all given sorted sets. + */ + async zUnion(keys: string[], withScores = false): Promise { + const res = await this.call<{ members: Array<{ score: number; member: string }> }>( + 'zUnion', { keys, withScores }, + ); + return res.members.map(m => ({ member: m.member, score: m.score })); + } + + /** + * Iterates over members of a sorted set. Start with cursor `0`; done when + * the returned cursor is `0`. + */ + async zScan(key: string, cursor: number, opts: ScanOptions = {}): Promise { + const req: Record = { key, cursor, count: opts.count ?? 0 }; + if (opts.pattern != null) req.pattern = opts.pattern; + const res = await this.call<{ + cursor: number; + members: Array<{ score: number; member: string }>; + }>('zScan', req); + return { + cursor: res.cursor, + members: res.members.map(m => ({ member: m.member, score: m.score })), + }; + } + + // --------------------------------------------------------------------------- + // vectors (requires server built with the `vector` feature) + // --------------------------------------------------------------------------- + + /** + * Adds a vector to a vector set. Returns `true` if the element was newly added. + * + * @example + * ```ts + * await client.vAdd('embeddings', 'doc:1', [0.1, 0.2, 0.3]); + * ``` + */ + async vAdd( + key: string, + element: string, + vector: number[], + opts: VAddOptions = {}, + ): Promise { + const req: Record = { key, element, vector }; + if (opts.metric) req.metric = opts.metric; + if (opts.quantization) req.quantization = opts.quantization; + if (opts.connectivity != null) req.connectivity = opts.connectivity; + if (opts.efConstruction != null) req.efConstruction = opts.efConstruction; + const res = await this.call<{ value: boolean }>('vAdd', req); + return res.value; + } + + /** + * Adds multiple vectors to a vector set in one call. + * Returns the number of elements added. + */ + async vAddBatch( + key: string, + entries: VAddBatchEntry[], + opts: VAddBatchOptions = {}, + ): Promise { + const req: Record = { key, entries }; + if (opts.metric) req.metric = opts.metric; + if (opts.quantization) req.quantization = opts.quantization; + if (opts.connectivity != null) req.connectivity = opts.connectivity; + if (opts.efConstruction != null) req.efConstruction = opts.efConstruction; + const res = await this.call<{ value: number }>('vAddBatch', req); + return res.value; + } + + /** + * Searches for the `count` nearest neighbors to `query` in the vector set. + * Results are returned sorted by similarity (closest first). + */ + async vSim( + key: string, + query: number[], + count: number, + opts: VSimOptions = {}, + ): Promise { + const req: Record = { key, query, count }; + if (opts.efSearch != null) req.efSearch = opts.efSearch; + const res = await this.call<{ results: Array<{ element: string; distance: number }> }>( + 'vSim', req, + ); + return res.results.map(r => ({ element: r.element, distance: r.distance })); + } + + /** + * Removes an element from a vector set. Returns `true` if the element was removed. + */ + async vRem(key: string, element: string): Promise { + const res = await this.call<{ value: boolean }>('vRem', { key, element }); + return res.value; + } + + /** + * Returns the stored vector for `element`. + * `exists: false` if the element is not in the set. + */ + async vGet(key: string, element: string): Promise { + const res = await this.call<{ exists?: boolean; vector: number[] }>('vGet', { key, element }); + return { exists: res.exists ?? false, vector: res.vector ?? [] }; + } + + /** + * Returns the number of elements in a vector set. + */ + async vCard(key: string): Promise { + const res = await this.call<{ value: number }>('vCard', { key }); + return res.value; + } + + /** + * Returns the dimensionality of vectors in the set. + */ + async vDim(key: string): Promise { + const res = await this.call<{ value: number }>('vDim', { key }); + return res.value; + } + + /** + * Returns metadata about a vector set (metric, quantization, dimensions, etc.). + */ + async vInfo(key: string): Promise { + const res = await this.call<{ + exists: boolean; + info: Array<{ field: string; value: Buffer }>; + }>('vInfo', { key }); + const info: Record = {}; + for (const fv of res.info) { + info[fv.field] = fv.value.toString(); + } + return { exists: res.exists, info }; + } + + // --------------------------------------------------------------------------- + // pub/sub + // --------------------------------------------------------------------------- + + /** + * Publishes a message to a channel. Returns the number of subscribers that + * received it. + */ + async publish(channel: string, message: Buffer | string): Promise { + const res = await this.call<{ value: number }>('publish', { + channel, + message: Buffer.isBuffer(message) ? message : Buffer.from(message), + }); + return res.value; + } + + /** + * Subscribes to one or more channels and/or patterns. Yields events until + * the caller breaks out of the loop or calls `return()` on the iterator. + * + * Pass channel names in `channels` for exact matches and glob patterns in + * `patterns` for wildcard matching. + * + * @example + * ```ts + * for await (const evt of client.subscribe(['news', 'alerts'])) { + * console.log(evt.channel, evt.data?.toString()); + * if (evt.channel === 'alerts') break; // unsubscribes cleanly + * } + * ``` + */ + subscribe(channels: string[], patterns: string[] = []): AsyncIterable { + const raw = this.stream<{ + kind: string; + channel: string; + data: Buffer; + pattern?: string; + }>('subscribe', { channels, patterns }); + + return { + [Symbol.asyncIterator]() { + const iter = raw[Symbol.asyncIterator](); + return { + async next() { + const { value, done } = await iter.next(); + if (done) return { value: undefined as unknown as SubscribeEvent, done: true }; + return { + value: { + kind: value.kind, + channel: value.channel, + data: value.data ?? null, + pattern: value.pattern, + } as SubscribeEvent, + done: false, + }; + }, + return() { + return ( + iter.return?.() ?? + Promise.resolve({ value: undefined as unknown as SubscribeEvent, done: true }) + ); + }, + }; + }, + }; + } + + /** + * Returns the names of all active channels, optionally filtered by `pattern`. + */ + async pubSubChannels(pattern?: string): Promise { + const req: Record = {}; + if (pattern != null) req.pattern = pattern; + const res = await this.call<{ keys: string[] }>('pubSubChannels', req); + return res.keys; + } + + /** + * Returns a map of channel name → subscriber count for the given channels. + */ + async pubSubNumSub(...channels: string[]): Promise> { + const res = await this.call<{ counts: Array<{ channel: string; count: number }> }>( + 'pubSubNumSub', { channels }, + ); + const result = new Map(); + for (const c of res.counts) { + result.set(c.channel, c.count); + } + return result; + } + + /** + * Returns the number of active pattern subscriptions across all clients. + */ + async pubSubNumPat(): Promise { + const res = await this.call<{ value: number }>('pubSubNumPat', {}); + return res.value; + } + + // --------------------------------------------------------------------------- + // server + // --------------------------------------------------------------------------- + + /** + * Sends a PING. Returns `"PONG"` by default, or echoes `message` if provided. + */ + async ping(message?: string): Promise { + const req: Record = {}; + if (message != null) req.message = message; + const res = await this.call<{ message: string }>('ping', req); + return res.message; + } + + /** + * Sends `message` to the server and returns it back unchanged. + */ + async echo(message: string): Promise { + const res = await this.call<{ message: string }>('echo', { message }); + return res.message; + } + + /** + * Removes all keys from the active database. + * Pass `true` for a non-blocking background flush. + */ + async flushDb(async_ = false): Promise { + await this.call('flushDb', { async: async_ }); + } + + /** + * Returns the total number of keys across all shards. + */ + async dbSize(): Promise { + const res = await this.call<{ value: number }>('dbSize', {}); + return res.value; + } + + /** + * Returns server statistics as a multi-line string. + * Pass an optional `section` to limit the output (e.g. `"memory"`, `"server"`). + */ + async info(section?: string): Promise { + const req: Record = {}; + if (section != null) req.section = section; + const res = await this.call<{ info: string }>('info', req); + return res.info; + } + + /** + * Triggers an asynchronous snapshot of the dataset to disk. Returns the + * server's status message. + */ + async bgSave(): Promise { + const res = await this.call<{ status: string }>('bgSave', {}); + return res.status; + } + + /** + * Triggers an asynchronous rewrite of the append-only file. Returns the + * server's status message. + */ + async bgRewriteAof(): Promise { + const res = await this.call<{ status: string }>('bgRewriteAof', {}); + return res.status; + } + + /** + * Returns the current server time. + */ + async time(): Promise { + const res = await this.call<{ seconds: number; microseconds: number }>('time', {}); + return { seconds: res.seconds, microseconds: res.microseconds }; + } + + /** + * Returns the Unix timestamp of the last successful BGSAVE. + */ + async lastSave(): Promise { + const res = await this.call<{ value: number }>('lastSave', {}); + return res.value; + } + + // --------------------------------------------------------------------------- + // slowlog + // --------------------------------------------------------------------------- + + /** + * Returns entries from the slow log. Pass `count` to limit the number returned. + */ + async slowLogGet(count?: number): Promise { + const req: Record = {}; + if (count != null) req.count = count; + const res = await this.call<{ + entries: Array<{ + id: number; + timestampUnix: number; + durationMicros: number; + command: string; + }>; + }>('slowLogGet', req); + return res.entries.map(e => ({ + id: e.id, + timestamp: e.timestampUnix, + durationMicros: e.durationMicros, + command: e.command, + })); + } + + /** + * Returns the number of entries currently in the slow log. + */ + async slowLogLen(): Promise { + const res = await this.call<{ value: number }>('slowLogLen', {}); + return res.value; + } + + /** + * Clears all entries from the slow log. + */ + async slowLogReset(): Promise { + await this.call('slowLogReset', {}); + } +} diff --git a/clients/ember-ts/src/index.ts b/clients/ember-ts/src/index.ts new file mode 100644 index 00000000..016e19f5 --- /dev/null +++ b/clients/ember-ts/src/index.ts @@ -0,0 +1,26 @@ +export { EmberClient } from './client'; +export type { + ClientOptions, + SetOptions, + GetExOptions, + ScanOptions, + ZAddOptions, + ZRangeByScoreOptions, + VectorMetric, + VectorQuantization, + VAddOptions, + VAddBatchOptions, + VAddBatchEntry, + VSimOptions, + ScoreMember, + VSimResult, + SlowLogEntry, + SubscribeEvent, + ScanPage, + HScanPage, + ZScanPage, + SScanPage, + TimeResult, + VGetResult, + VInfoResult, +} from './types'; diff --git a/clients/ember-ts/src/types.ts b/clients/ember-ts/src/types.ts new file mode 100644 index 00000000..db530430 --- /dev/null +++ b/clients/ember-ts/src/types.ts @@ -0,0 +1,246 @@ +/** + * Options passed to the EmberClient constructor. + */ +export interface ClientOptions { + /** authentication password, sent as the `authorization` metadata header. */ + password?: string; +} + +/** + * Options for the SET command. + */ +export interface SetOptions { + /** expire the key after this many seconds. */ + ex?: number; + /** expire the key after this many milliseconds. */ + px?: number; + /** only set the key if it does not already exist. */ + nx?: boolean; + /** only set the key if it already exists. */ + xx?: boolean; +} + +/** + * Options for the GETEX command. + */ +export interface GetExOptions { + /** set expiry in seconds. */ + ex?: number; + /** set expiry in milliseconds (takes precedence over `ex`). */ + px?: number; + /** remove the existing expiry, making the key persistent. */ + persist?: boolean; +} + +/** + * Options for SCAN, HSCAN, SSCAN, and ZSCAN commands. + */ +export interface ScanOptions { + /** glob-style pattern to filter returned keys/members. */ + pattern?: string; + /** hint for how many items to return per call. the server may return more or fewer. */ + count?: number; +} + +/** + * Options for the ZADD command. + */ +export interface ZAddOptions { + /** only add new members; never update scores of existing members. */ + nx?: boolean; + /** only update existing members; never add new members. */ + xx?: boolean; + /** only update if the new score is greater than the current score. */ + gt?: boolean; + /** only update if the new score is less than the current score. */ + lt?: boolean; + /** return the number of elements changed (added + updated) instead of only added. */ + ch?: boolean; +} + +/** + * Options for ZRANGEBYSCORE and ZREVRANGEBYSCORE commands. + */ +export interface ZRangeByScoreOptions { + /** starting offset for pagination. */ + offset?: number; + /** maximum number of results to return. */ + count?: number; + /** include scores in the response. */ + withScores?: boolean; +} + +/** + * Distance metric used for vector similarity search. + */ +export type VectorMetric = + | 'VECTOR_METRIC_COSINE' + | 'VECTOR_METRIC_EUCLIDEAN' + | 'VECTOR_METRIC_INNER_PRODUCT'; + +/** + * Quantization strategy for compressing stored vectors. + */ +export type VectorQuantization = + | 'VECTOR_QUANTIZATION_NONE' + | 'VECTOR_QUANTIZATION_F16' + | 'VECTOR_QUANTIZATION_I8'; + +/** + * Options for the VADD command. + */ +export interface VAddOptions { + /** distance metric for the vector set. defaults to cosine. */ + metric?: VectorMetric; + /** quantization strategy to compress stored vectors. */ + quantization?: VectorQuantization; + /** HNSW M parameter — number of connections per node. */ + connectivity?: number; + /** HNSW ef_construction parameter — search width during index build. */ + efConstruction?: number; +} + +/** + * Options for the VADDBATCH command. + */ +export interface VAddBatchOptions { + /** distance metric for the vector set. defaults to cosine. */ + metric?: VectorMetric; + /** quantization strategy to compress stored vectors. */ + quantization?: VectorQuantization; + /** HNSW M parameter. */ + connectivity?: number; + /** HNSW ef_construction parameter. */ + efConstruction?: number; +} + +/** + * A single entry for VADDBATCH. + */ +export interface VAddBatchEntry { + /** the element name. */ + element: string; + /** the vector as an array of floats. */ + vector: number[]; +} + +/** + * Options for the VSIM command. + */ +export interface VSimOptions { + /** ef_search parameter — controls recall vs. latency trade-off. */ + efSearch?: number; +} + +// --------------------------------------------------------------------------- +// result types +// --------------------------------------------------------------------------- + +/** + * A sorted-set member paired with its score. + */ +export interface ScoreMember { + member: string; + score: number; +} + +/** + * A single result from VSIM (vector similarity search). + */ +export interface VSimResult { + element: string; + distance: number; +} + +/** + * An entry from the slow log. + */ +export interface SlowLogEntry { + id: number; + /** unix timestamp when the command was executed. */ + timestamp: number; + /** how long the command took, in microseconds. */ + durationMicros: number; + /** the command string as logged by the server. */ + command: string; +} + +/** + * An event received on a pub/sub subscription. + */ +export interface SubscribeEvent { + /** "message" for exact channel matches, "pmessage" for pattern matches. */ + kind: string; + /** the channel the message was published to. */ + channel: string; + /** the message payload. */ + data: Buffer | null; + /** the pattern that matched (only present for pmessage events). */ + pattern?: string; +} + +/** + * A page of keys returned by SCAN. + */ +export interface ScanPage { + /** the cursor for the next call. 0 means the scan is complete. */ + cursor: number; + keys: string[]; +} + +/** + * A page of field-value pairs returned by HSCAN. + */ +export interface HScanPage { + /** the cursor for the next call. 0 means the scan is complete. */ + cursor: number; + fields: Record; +} + +/** + * A page of score-member pairs returned by ZSCAN. + */ +export interface ZScanPage { + /** the cursor for the next call. 0 means the scan is complete. */ + cursor: number; + members: ScoreMember[]; +} + +/** + * A page of set members returned by SSCAN. + */ +export interface SScanPage { + /** the cursor for the next call. 0 means the scan is complete. */ + cursor: number; + members: string[]; +} + +/** + * The current server time, as returned by TIME. + */ +export interface TimeResult { + /** unix timestamp in whole seconds. */ + seconds: number; + /** microseconds offset within the current second. */ + microseconds: number; +} + +/** + * The result of VGET — the stored vector for a named element. + */ +export interface VGetResult { + /** false if the element does not exist in the vector set. */ + exists: boolean; + /** the stored vector as an array of floats. empty if the element does not exist. */ + vector: number[]; +} + +/** + * Metadata about a vector set, returned by VINFO. + */ +export interface VInfoResult { + /** false if the vector set key does not exist. */ + exists: boolean; + /** metadata fields (metric, dimensions, capacity, etc.) as string values. */ + info: Record; +}