event_store_client 1.4.8 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +30 -145
- data/docs/appending_events.md +155 -0
- data/docs/catch_up_subscriptions.md +253 -0
- data/docs/configuration.md +83 -0
- data/docs/deleting_streams.md +25 -0
- data/docs/encrypting_events.md +84 -0
- data/docs/linking_events.md +149 -0
- data/docs/reading_events.md +200 -0
- data/lib/event_store_client/adapters/grpc/client.rb +244 -105
- data/lib/event_store_client/adapters/grpc/cluster/gossip_discover.rb +131 -0
- data/lib/event_store_client/adapters/grpc/cluster/insecure_connection.rb +21 -0
- data/lib/event_store_client/adapters/grpc/cluster/member.rb +18 -0
- data/lib/event_store_client/adapters/grpc/cluster/queryless_discover.rb +25 -0
- data/lib/event_store_client/adapters/grpc/cluster/secure_connection.rb +71 -0
- data/lib/event_store_client/adapters/grpc/command_registrar.rb +7 -7
- data/lib/event_store_client/adapters/grpc/commands/command.rb +63 -25
- data/lib/event_store_client/adapters/grpc/commands/gossip/cluster_info.rb +24 -0
- data/lib/event_store_client/adapters/grpc/commands/streams/append.rb +43 -68
- data/lib/event_store_client/adapters/grpc/commands/streams/append_multiple.rb +44 -0
- data/lib/event_store_client/adapters/grpc/commands/streams/delete.rb +21 -17
- data/lib/event_store_client/adapters/grpc/commands/streams/hard_delete.rb +39 -0
- data/lib/event_store_client/adapters/grpc/commands/streams/link_to.rb +7 -52
- data/lib/event_store_client/adapters/grpc/commands/streams/link_to_multiple.rb +44 -0
- data/lib/event_store_client/adapters/grpc/commands/streams/read.rb +20 -85
- data/lib/event_store_client/adapters/grpc/commands/streams/read_paginated.rb +174 -0
- data/lib/event_store_client/adapters/grpc/commands/streams/subscribe.rb +31 -106
- data/lib/event_store_client/adapters/grpc/connection.rb +56 -36
- data/lib/event_store_client/adapters/grpc/discover.rb +75 -0
- data/lib/event_store_client/adapters/grpc/generated/cluster_pb.rb +106 -18
- data/lib/event_store_client/adapters/grpc/generated/cluster_services_pb.rb +12 -12
- data/lib/event_store_client/adapters/grpc/generated/code_pb.rb +34 -0
- data/lib/event_store_client/adapters/grpc/generated/gossip_pb.rb +3 -2
- data/lib/event_store_client/adapters/grpc/generated/gossip_services_pb.rb +3 -3
- data/lib/event_store_client/adapters/grpc/generated/monitoring_pb.rb +25 -0
- data/lib/event_store_client/adapters/grpc/generated/monitoring_services_pb.rb +26 -0
- data/lib/event_store_client/adapters/grpc/generated/operations_pb.rb +2 -1
- data/lib/event_store_client/adapters/grpc/generated/operations_services_pb.rb +8 -7
- data/lib/event_store_client/adapters/grpc/generated/persistent_pb.rb +199 -38
- data/lib/event_store_client/adapters/grpc/generated/persistent_services_pb.rb +7 -3
- data/lib/event_store_client/adapters/grpc/generated/projections_pb.rb +9 -26
- data/lib/event_store_client/adapters/grpc/generated/projections_services_pb.rb +4 -3
- data/lib/event_store_client/adapters/grpc/generated/serverfeatures_pb.rb +29 -0
- data/lib/event_store_client/adapters/grpc/generated/serverfeatures_services_pb.rb +26 -0
- data/lib/event_store_client/adapters/grpc/generated/shared_pb.rb +54 -12
- data/lib/event_store_client/adapters/grpc/generated/status_pb.rb +23 -0
- data/lib/event_store_client/adapters/grpc/generated/streams_pb.rb +104 -64
- data/lib/event_store_client/adapters/grpc/generated/streams_services_pb.rb +3 -2
- data/lib/event_store_client/adapters/grpc/generated/users_services_pb.rb +2 -2
- data/lib/event_store_client/adapters/grpc/options/streams/read_options.rb +78 -0
- data/lib/event_store_client/adapters/grpc/options/streams/write_options.rb +39 -0
- data/lib/event_store_client/adapters/grpc/shared/event_deserializer.rb +52 -0
- data/lib/event_store_client/adapters/grpc/shared/options/filter_options.rb +76 -0
- data/lib/event_store_client/adapters/grpc/shared/options/stream_options.rb +91 -0
- data/lib/event_store_client/adapters/grpc/shared/streams/process_response.rb +28 -0
- data/lib/event_store_client/adapters/grpc/shared/streams/process_responses.rb +33 -0
- data/lib/event_store_client/adapters/grpc.rb +28 -12
- data/lib/event_store_client/configuration.rb +39 -54
- data/lib/event_store_client/connection/url.rb +57 -0
- data/lib/event_store_client/connection/url_parser.rb +144 -0
- data/lib/event_store_client/data_decryptor.rb +2 -9
- data/lib/event_store_client/deserialized_event.rb +35 -10
- data/lib/event_store_client/encryption_metadata.rb +0 -1
- data/lib/event_store_client/event.rb +4 -2
- data/lib/event_store_client/extensions/options_extension.rb +87 -0
- data/lib/event_store_client/mapper/default.rb +12 -9
- data/lib/event_store_client/mapper/encrypted.rb +18 -17
- data/lib/event_store_client/types.rb +1 -1
- data/lib/event_store_client/utils.rb +30 -0
- data/lib/event_store_client/version.rb +1 -1
- data/lib/event_store_client.rb +8 -7
- metadata +72 -81
- data/lib/event_store_client/adapters/grpc/Protos/cluster.proto +0 -149
- data/lib/event_store_client/adapters/grpc/Protos/gossip.proto +0 -44
- data/lib/event_store_client/adapters/grpc/Protos/operations.proto +0 -45
- data/lib/event_store_client/adapters/grpc/Protos/persistent.proto +0 -180
- data/lib/event_store_client/adapters/grpc/Protos/projections.proto +0 -174
- data/lib/event_store_client/adapters/grpc/Protos/shared.proto +0 -22
- data/lib/event_store_client/adapters/grpc/Protos/streams.proto +0 -242
- data/lib/event_store_client/adapters/grpc/Protos/users.proto +0 -119
- data/lib/event_store_client/adapters/grpc/README.md +0 -16
- data/lib/event_store_client/adapters/grpc/commands/persistent_subscriptions/create.rb +0 -46
- data/lib/event_store_client/adapters/grpc/commands/persistent_subscriptions/delete.rb +0 -34
- data/lib/event_store_client/adapters/grpc/commands/persistent_subscriptions/read.rb +0 -77
- data/lib/event_store_client/adapters/grpc/commands/persistent_subscriptions/settings_schema.rb +0 -38
- data/lib/event_store_client/adapters/grpc/commands/persistent_subscriptions/update.rb +0 -48
- data/lib/event_store_client/adapters/grpc/commands/projections/create.rb +0 -48
- data/lib/event_store_client/adapters/grpc/commands/projections/delete.rb +0 -34
- data/lib/event_store_client/adapters/grpc/commands/projections/update.rb +0 -44
- data/lib/event_store_client/adapters/grpc/commands/streams/read_all.rb +0 -43
- data/lib/event_store_client/adapters/grpc/commands/streams/tombstone.rb +0 -35
- data/lib/event_store_client/adapters/http/README.md +0 -16
- data/lib/event_store_client/adapters/http/client.rb +0 -161
- data/lib/event_store_client/adapters/http/commands/command.rb +0 -27
- data/lib/event_store_client/adapters/http/commands/persistent_subscriptions/ack.rb +0 -15
- data/lib/event_store_client/adapters/http/commands/persistent_subscriptions/create.rb +0 -35
- data/lib/event_store_client/adapters/http/commands/persistent_subscriptions/read.rb +0 -60
- data/lib/event_store_client/adapters/http/commands/projections/create.rb +0 -33
- data/lib/event_store_client/adapters/http/commands/projections/update.rb +0 -31
- data/lib/event_store_client/adapters/http/commands/streams/append.rb +0 -49
- data/lib/event_store_client/adapters/http/commands/streams/delete.rb +0 -16
- data/lib/event_store_client/adapters/http/commands/streams/link_to.rb +0 -49
- data/lib/event_store_client/adapters/http/commands/streams/read.rb +0 -52
- data/lib/event_store_client/adapters/http/commands/streams/tombstone.rb +0 -17
- data/lib/event_store_client/adapters/http/connection.rb +0 -46
- data/lib/event_store_client/adapters/http/request_method.rb +0 -28
- data/lib/event_store_client/adapters/http.rb +0 -17
- data/lib/event_store_client/adapters/in_memory.rb +0 -144
- data/lib/event_store_client/broker.rb +0 -40
- data/lib/event_store_client/catch_up_subscription.rb +0 -42
- data/lib/event_store_client/catch_up_subscriptions.rb +0 -91
- data/lib/event_store_client/client.rb +0 -73
- data/lib/event_store_client/error_handler.rb +0 -10
- data/lib/event_store_client/subscription.rb +0 -23
- data/lib/event_store_client/subscriptions.rb +0 -38
- data/lib/event_store_client/value_objects/read_direction.rb +0 -43
@@ -0,0 +1,23 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: status.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
require 'google/protobuf/any_pb'
|
7
|
+
require_relative 'code_pb'
|
8
|
+
|
9
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
10
|
+
add_file("status.proto", :syntax => :proto3) do
|
11
|
+
add_message "google.rpc.Status" do
|
12
|
+
optional :code, :enum, 1, "google.rpc.Code"
|
13
|
+
optional :message, :string, 2
|
14
|
+
optional :details, :message, 3, "google.protobuf.Any"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Google
|
20
|
+
module Rpc
|
21
|
+
Status = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.rpc.Status").msgclass
|
22
|
+
end
|
23
|
+
end
|
@@ -3,12 +3,14 @@
|
|
3
3
|
|
4
4
|
require 'google/protobuf'
|
5
5
|
|
6
|
-
|
6
|
+
require_relative 'shared_pb'
|
7
|
+
require_relative 'status_pb'
|
8
|
+
require 'google/protobuf/duration_pb'
|
9
|
+
require 'google/protobuf/empty_pb'
|
10
|
+
require 'google/protobuf/timestamp_pb'
|
7
11
|
|
8
12
|
Google::Protobuf::DescriptorPool.generated_pool.build do
|
9
13
|
add_file("streams.proto", :syntax => :proto3) do
|
10
|
-
### Read Request definition
|
11
|
-
#
|
12
14
|
add_message "event_store.client.streams.ReadReq" do
|
13
15
|
optional :options, :message, 1, "event_store.client.streams.ReadReq.Options"
|
14
16
|
end
|
@@ -16,6 +18,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
16
18
|
optional :read_direction, :enum, 3, "event_store.client.streams.ReadReq.Options.ReadDirection"
|
17
19
|
optional :resolve_links, :bool, 4
|
18
20
|
optional :uuid_option, :message, 9, "event_store.client.streams.ReadReq.Options.UUIDOption"
|
21
|
+
optional :control_option, :message, 10, "event_store.client.streams.ReadReq.Options.ControlOption"
|
19
22
|
oneof :stream_option do
|
20
23
|
optional :stream, :message, 1, "event_store.client.streams.ReadReq.Options.StreamOptions"
|
21
24
|
optional :all, :message, 2, "event_store.client.streams.ReadReq.Options.AllOptions"
|
@@ -26,22 +29,22 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
26
29
|
end
|
27
30
|
oneof :filter_option do
|
28
31
|
optional :filter, :message, 7, "event_store.client.streams.ReadReq.Options.FilterOptions"
|
29
|
-
optional :no_filter, :message, 8, "event_store.client.
|
32
|
+
optional :no_filter, :message, 8, "event_store.client.Empty"
|
30
33
|
end
|
31
34
|
end
|
32
35
|
add_message "event_store.client.streams.ReadReq.Options.StreamOptions" do
|
33
|
-
optional :stream_identifier, :message, 1, "event_store.client.
|
36
|
+
optional :stream_identifier, :message, 1, "event_store.client.StreamIdentifier"
|
34
37
|
oneof :revision_option do
|
35
38
|
optional :revision, :uint64, 2
|
36
|
-
optional :start, :message, 3, "event_store.client.
|
37
|
-
optional :end, :message, 4, "event_store.client.
|
39
|
+
optional :start, :message, 3, "event_store.client.Empty"
|
40
|
+
optional :end, :message, 4, "event_store.client.Empty"
|
38
41
|
end
|
39
42
|
end
|
40
43
|
add_message "event_store.client.streams.ReadReq.Options.AllOptions" do
|
41
44
|
oneof :all_option do
|
42
45
|
optional :position, :message, 1, "event_store.client.streams.ReadReq.Options.Position"
|
43
|
-
optional :start, :message, 2, "event_store.client.
|
44
|
-
optional :end, :message, 3, "event_store.client.
|
46
|
+
optional :start, :message, 2, "event_store.client.Empty"
|
47
|
+
optional :end, :message, 3, "event_store.client.Empty"
|
45
48
|
end
|
46
49
|
end
|
47
50
|
add_message "event_store.client.streams.ReadReq.Options.SubscriptionOptions" do
|
@@ -58,7 +61,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
58
61
|
end
|
59
62
|
oneof :window do
|
60
63
|
optional :max, :uint32, 3
|
61
|
-
optional :count, :message, 4, "event_store.client.
|
64
|
+
optional :count, :message, 4, "event_store.client.Empty"
|
62
65
|
end
|
63
66
|
end
|
64
67
|
add_message "event_store.client.streams.ReadReq.Options.FilterOptions.Expression" do
|
@@ -67,23 +70,26 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
67
70
|
end
|
68
71
|
add_message "event_store.client.streams.ReadReq.Options.UUIDOption" do
|
69
72
|
oneof :content do
|
70
|
-
optional :structured, :message, 1, "event_store.client.
|
71
|
-
optional :string, :message, 2, "event_store.client.
|
73
|
+
optional :structured, :message, 1, "event_store.client.Empty"
|
74
|
+
optional :string, :message, 2, "event_store.client.Empty"
|
72
75
|
end
|
73
76
|
end
|
77
|
+
add_message "event_store.client.streams.ReadReq.Options.ControlOption" do
|
78
|
+
optional :compatibility, :uint32, 1
|
79
|
+
end
|
74
80
|
add_enum "event_store.client.streams.ReadReq.Options.ReadDirection" do
|
75
81
|
value :Forwards, 0
|
76
82
|
value :Backwards, 1
|
77
83
|
end
|
78
|
-
|
79
|
-
# Read Response definition
|
80
|
-
#
|
81
84
|
add_message "event_store.client.streams.ReadResp" do
|
82
85
|
oneof :content do
|
83
86
|
optional :event, :message, 1, "event_store.client.streams.ReadResp.ReadEvent"
|
84
87
|
optional :confirmation, :message, 2, "event_store.client.streams.ReadResp.SubscriptionConfirmation"
|
85
88
|
optional :checkpoint, :message, 3, "event_store.client.streams.ReadResp.Checkpoint"
|
86
89
|
optional :stream_not_found, :message, 4, "event_store.client.streams.ReadResp.StreamNotFound"
|
90
|
+
optional :first_stream_position, :uint64, 5
|
91
|
+
optional :last_stream_position, :uint64, 6
|
92
|
+
optional :last_all_stream_position, :message, 7, "event_store.client.AllStreamPosition"
|
87
93
|
end
|
88
94
|
end
|
89
95
|
add_message "event_store.client.streams.ReadResp.ReadEvent" do
|
@@ -91,12 +97,12 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
91
97
|
optional :link, :message, 2, "event_store.client.streams.ReadResp.ReadEvent.RecordedEvent"
|
92
98
|
oneof :position do
|
93
99
|
optional :commit_position, :uint64, 3
|
94
|
-
optional :no_position, :message, 4, "event_store.client.
|
100
|
+
optional :no_position, :message, 4, "event_store.client.Empty"
|
95
101
|
end
|
96
102
|
end
|
97
103
|
add_message "event_store.client.streams.ReadResp.ReadEvent.RecordedEvent" do
|
98
|
-
optional :id, :message, 1, "event_store.client.
|
99
|
-
optional :stream_identifier, :message, 2, "event_store.client.
|
104
|
+
optional :id, :message, 1, "event_store.client.UUID"
|
105
|
+
optional :stream_identifier, :message, 2, "event_store.client.StreamIdentifier"
|
100
106
|
optional :stream_revision, :uint64, 3
|
101
107
|
optional :prepare_position, :uint64, 4
|
102
108
|
optional :commit_position, :uint64, 5
|
@@ -112,38 +118,29 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
112
118
|
optional :prepare_position, :uint64, 2
|
113
119
|
end
|
114
120
|
add_message "event_store.client.streams.ReadResp.StreamNotFound" do
|
115
|
-
optional :stream_identifier, :message, 1, "event_store.client.
|
121
|
+
optional :stream_identifier, :message, 1, "event_store.client.StreamIdentifier"
|
116
122
|
end
|
117
|
-
|
118
|
-
# Append to stream request
|
119
|
-
#
|
120
123
|
add_message "event_store.client.streams.AppendReq" do
|
121
124
|
oneof :content do
|
122
125
|
optional :options, :message, 1, "event_store.client.streams.AppendReq.Options"
|
123
126
|
optional :proposed_message, :message, 2, "event_store.client.streams.AppendReq.ProposedMessage"
|
124
127
|
end
|
125
128
|
end
|
126
|
-
# first send options message with info to which stream to append
|
127
|
-
# then send the proposed message to the last options request.
|
128
|
-
#
|
129
129
|
add_message "event_store.client.streams.AppendReq.Options" do
|
130
|
-
optional :stream_identifier, :message, 1, "event_store.client.
|
130
|
+
optional :stream_identifier, :message, 1, "event_store.client.StreamIdentifier"
|
131
131
|
oneof :expected_stream_revision do
|
132
132
|
optional :revision, :uint64, 2
|
133
|
-
optional :no_stream, :message, 3, "event_store.client.
|
134
|
-
optional :any, :message, 4, "event_store.client.
|
135
|
-
optional :stream_exists, :message, 5, "event_store.client.
|
133
|
+
optional :no_stream, :message, 3, "event_store.client.Empty"
|
134
|
+
optional :any, :message, 4, "event_store.client.Empty"
|
135
|
+
optional :stream_exists, :message, 5, "event_store.client.Empty"
|
136
136
|
end
|
137
137
|
end
|
138
138
|
add_message "event_store.client.streams.AppendReq.ProposedMessage" do
|
139
|
-
optional :id, :message, 1, "event_store.client.
|
139
|
+
optional :id, :message, 1, "event_store.client.UUID"
|
140
140
|
map :metadata, :string, :string, 2
|
141
141
|
optional :custom_metadata, :bytes, 3
|
142
142
|
optional :data, :bytes, 4
|
143
143
|
end
|
144
|
-
|
145
|
-
# Append to stream response
|
146
|
-
#
|
147
144
|
add_message "event_store.client.streams.AppendResp" do
|
148
145
|
oneof :result do
|
149
146
|
optional :success, :message, 1, "event_store.client.streams.AppendResp.Success"
|
@@ -157,84 +154,121 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
157
154
|
add_message "event_store.client.streams.AppendResp.Success" do
|
158
155
|
oneof :current_revision_option do
|
159
156
|
optional :current_revision, :uint64, 1
|
160
|
-
optional :no_stream, :message, 2, "event_store.client.
|
157
|
+
optional :no_stream, :message, 2, "event_store.client.Empty"
|
161
158
|
end
|
162
159
|
oneof :position_option do
|
163
160
|
optional :position, :message, 3, "event_store.client.streams.AppendResp.Position"
|
164
|
-
optional :no_position, :message, 4, "event_store.client.
|
161
|
+
optional :no_position, :message, 4, "event_store.client.Empty"
|
165
162
|
end
|
166
163
|
end
|
167
164
|
add_message "event_store.client.streams.AppendResp.WrongExpectedVersion" do
|
168
165
|
oneof :current_revision_option_20_6_0 do
|
169
166
|
optional :current_revision_20_6_0, :uint64, 1
|
170
|
-
optional :no_stream_20_6_0, :message, 2, "event_store.client.
|
167
|
+
optional :no_stream_20_6_0, :message, 2, "event_store.client.Empty"
|
171
168
|
end
|
172
169
|
oneof :expected_revision_option_20_6_0 do
|
173
170
|
optional :expected_revision_20_6_0, :uint64, 3
|
174
|
-
optional :any_20_6_0, :message, 4, "event_store.client.
|
175
|
-
optional :stream_exists_20_6_0, :message, 5, "event_store.client.
|
171
|
+
optional :any_20_6_0, :message, 4, "event_store.client.Empty"
|
172
|
+
optional :stream_exists_20_6_0, :message, 5, "event_store.client.Empty"
|
176
173
|
end
|
177
174
|
oneof :current_revision_option do
|
178
175
|
optional :current_revision, :uint64, 6
|
179
|
-
optional :current_no_stream, :message, 7, "event_store.client.
|
176
|
+
optional :current_no_stream, :message, 7, "event_store.client.Empty"
|
180
177
|
end
|
181
178
|
oneof :expected_revision_option do
|
182
179
|
optional :expected_revision, :uint64, 8
|
183
|
-
optional :expected_any, :message, 9, "event_store.client.
|
184
|
-
optional :expected_stream_exists, :message, 10, "event_store.client.
|
185
|
-
optional :expected_no_stream, :message, 11, "event_store.client.
|
180
|
+
optional :expected_any, :message, 9, "event_store.client.Empty"
|
181
|
+
optional :expected_stream_exists, :message, 10, "event_store.client.Empty"
|
182
|
+
optional :expected_no_stream, :message, 11, "event_store.client.Empty"
|
183
|
+
end
|
184
|
+
end
|
185
|
+
add_message "event_store.client.streams.BatchAppendReq" do
|
186
|
+
optional :correlation_id, :message, 1, "event_store.client.UUID"
|
187
|
+
optional :options, :message, 2, "event_store.client.streams.BatchAppendReq.Options"
|
188
|
+
repeated :proposed_messages, :message, 3, "event_store.client.streams.BatchAppendReq.ProposedMessage"
|
189
|
+
optional :is_final, :bool, 4
|
190
|
+
end
|
191
|
+
add_message "event_store.client.streams.BatchAppendReq.Options" do
|
192
|
+
optional :stream_identifier, :message, 1, "event_store.client.StreamIdentifier"
|
193
|
+
oneof :expected_stream_position do
|
194
|
+
optional :stream_position, :uint64, 2
|
195
|
+
optional :no_stream, :message, 3, "google.protobuf.Empty"
|
196
|
+
optional :any, :message, 4, "google.protobuf.Empty"
|
197
|
+
optional :stream_exists, :message, 5, "google.protobuf.Empty"
|
198
|
+
end
|
199
|
+
oneof :deadline_option do
|
200
|
+
optional :deadline_21_10_0, :message, 6, "google.protobuf.Timestamp"
|
201
|
+
optional :deadline, :message, 7, "google.protobuf.Duration"
|
202
|
+
end
|
203
|
+
end
|
204
|
+
add_message "event_store.client.streams.BatchAppendReq.ProposedMessage" do
|
205
|
+
optional :id, :message, 1, "event_store.client.UUID"
|
206
|
+
map :metadata, :string, :string, 2
|
207
|
+
optional :custom_metadata, :bytes, 3
|
208
|
+
optional :data, :bytes, 4
|
209
|
+
end
|
210
|
+
add_message "event_store.client.streams.BatchAppendResp" do
|
211
|
+
optional :correlation_id, :message, 1, "event_store.client.UUID"
|
212
|
+
optional :stream_identifier, :message, 4, "event_store.client.StreamIdentifier"
|
213
|
+
oneof :result do
|
214
|
+
optional :error, :message, 2, "google.rpc.Status"
|
215
|
+
optional :success, :message, 3, "event_store.client.streams.BatchAppendResp.Success"
|
216
|
+
end
|
217
|
+
oneof :expected_stream_position do
|
218
|
+
optional :stream_position, :uint64, 5
|
219
|
+
optional :no_stream, :message, 6, "google.protobuf.Empty"
|
220
|
+
optional :any, :message, 7, "google.protobuf.Empty"
|
221
|
+
optional :stream_exists, :message, 8, "google.protobuf.Empty"
|
222
|
+
end
|
223
|
+
end
|
224
|
+
add_message "event_store.client.streams.BatchAppendResp.Success" do
|
225
|
+
oneof :current_revision_option do
|
226
|
+
optional :current_revision, :uint64, 1
|
227
|
+
optional :no_stream, :message, 2, "google.protobuf.Empty"
|
228
|
+
end
|
229
|
+
oneof :position_option do
|
230
|
+
optional :position, :message, 3, "event_store.client.AllStreamPosition"
|
231
|
+
optional :no_position, :message, 4, "google.protobuf.Empty"
|
186
232
|
end
|
187
233
|
end
|
188
|
-
|
189
|
-
# Delete stream request
|
190
|
-
#
|
191
234
|
add_message "event_store.client.streams.DeleteReq" do
|
192
235
|
optional :options, :message, 1, "event_store.client.streams.DeleteReq.Options"
|
193
236
|
end
|
194
237
|
add_message "event_store.client.streams.DeleteReq.Options" do
|
195
|
-
optional :stream_identifier, :message, 1, "event_store.client.
|
238
|
+
optional :stream_identifier, :message, 1, "event_store.client.StreamIdentifier"
|
196
239
|
oneof :expected_stream_revision do
|
197
240
|
optional :revision, :uint64, 2
|
198
|
-
optional :no_stream, :message, 3, "event_store.client.
|
199
|
-
optional :any, :message, 4, "event_store.client.
|
200
|
-
optional :stream_exists, :message, 5, "event_store.client.
|
241
|
+
optional :no_stream, :message, 3, "event_store.client.Empty"
|
242
|
+
optional :any, :message, 4, "event_store.client.Empty"
|
243
|
+
optional :stream_exists, :message, 5, "event_store.client.Empty"
|
201
244
|
end
|
202
245
|
end
|
203
|
-
|
204
|
-
# Delete stream response
|
205
|
-
#
|
206
246
|
add_message "event_store.client.streams.DeleteResp" do
|
207
247
|
oneof :position_option do
|
208
248
|
optional :position, :message, 1, "event_store.client.streams.DeleteResp.Position"
|
209
|
-
optional :no_position, :message, 2, "event_store.client.
|
249
|
+
optional :no_position, :message, 2, "event_store.client.Empty"
|
210
250
|
end
|
211
251
|
end
|
212
252
|
add_message "event_store.client.streams.DeleteResp.Position" do
|
213
253
|
optional :commit_position, :uint64, 1
|
214
254
|
optional :prepare_position, :uint64, 2
|
215
255
|
end
|
216
|
-
|
217
|
-
# Tombstone stream request
|
218
|
-
#
|
219
256
|
add_message "event_store.client.streams.TombstoneReq" do
|
220
257
|
optional :options, :message, 1, "event_store.client.streams.TombstoneReq.Options"
|
221
258
|
end
|
222
259
|
add_message "event_store.client.streams.TombstoneReq.Options" do
|
223
|
-
optional :stream_identifier, :message, 1, "event_store.client.
|
260
|
+
optional :stream_identifier, :message, 1, "event_store.client.StreamIdentifier"
|
224
261
|
oneof :expected_stream_revision do
|
225
262
|
optional :revision, :uint64, 2
|
226
|
-
optional :no_stream, :message, 3, "event_store.client.
|
227
|
-
optional :any, :message, 4, "event_store.client.
|
228
|
-
optional :stream_exists, :message, 5, "event_store.client.
|
263
|
+
optional :no_stream, :message, 3, "event_store.client.Empty"
|
264
|
+
optional :any, :message, 4, "event_store.client.Empty"
|
265
|
+
optional :stream_exists, :message, 5, "event_store.client.Empty"
|
229
266
|
end
|
230
267
|
end
|
231
|
-
|
232
|
-
# Tombstone stream response
|
233
|
-
#
|
234
268
|
add_message "event_store.client.streams.TombstoneResp" do
|
235
269
|
oneof :position_option do
|
236
270
|
optional :position, :message, 1, "event_store.client.streams.TombstoneResp.Position"
|
237
|
-
optional :no_position, :message, 2, "event_store.client.
|
271
|
+
optional :no_position, :message, 2, "event_store.client.Empty"
|
238
272
|
end
|
239
273
|
end
|
240
274
|
add_message "event_store.client.streams.TombstoneResp.Position" do
|
@@ -256,6 +290,7 @@ module EventStore
|
|
256
290
|
ReadReq::Options::FilterOptions = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.ReadReq.Options.FilterOptions").msgclass
|
257
291
|
ReadReq::Options::FilterOptions::Expression = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.ReadReq.Options.FilterOptions.Expression").msgclass
|
258
292
|
ReadReq::Options::UUIDOption = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.ReadReq.Options.UUIDOption").msgclass
|
293
|
+
ReadReq::Options::ControlOption = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.ReadReq.Options.ControlOption").msgclass
|
259
294
|
ReadReq::Options::ReadDirection = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.ReadReq.Options.ReadDirection").enummodule
|
260
295
|
ReadResp = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.ReadResp").msgclass
|
261
296
|
ReadResp::ReadEvent = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.ReadResp.ReadEvent").msgclass
|
@@ -270,6 +305,11 @@ module EventStore
|
|
270
305
|
AppendResp::Position = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.AppendResp.Position").msgclass
|
271
306
|
AppendResp::Success = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.AppendResp.Success").msgclass
|
272
307
|
AppendResp::WrongExpectedVersion = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.AppendResp.WrongExpectedVersion").msgclass
|
308
|
+
BatchAppendReq = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.BatchAppendReq").msgclass
|
309
|
+
BatchAppendReq::Options = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.BatchAppendReq.Options").msgclass
|
310
|
+
BatchAppendReq::ProposedMessage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.BatchAppendReq.ProposedMessage").msgclass
|
311
|
+
BatchAppendResp = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.BatchAppendResp").msgclass
|
312
|
+
BatchAppendResp::Success = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.BatchAppendResp.Success").msgclass
|
273
313
|
DeleteReq = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.DeleteReq").msgclass
|
274
314
|
DeleteReq::Options = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.DeleteReq.Options").msgclass
|
275
315
|
DeleteResp = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("event_store.client.streams.DeleteResp").msgclass
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# Source: streams.proto for package 'event_store.client.streams'
|
3
3
|
|
4
4
|
require 'grpc'
|
5
|
-
|
5
|
+
require_relative 'streams_pb'
|
6
6
|
|
7
7
|
module EventStore
|
8
8
|
module Client
|
@@ -10,7 +10,7 @@ module EventStore
|
|
10
10
|
module Streams
|
11
11
|
class Service
|
12
12
|
|
13
|
-
include GRPC::GenericService
|
13
|
+
include ::GRPC::GenericService
|
14
14
|
|
15
15
|
self.marshal_class_method = :encode
|
16
16
|
self.unmarshal_class_method = :decode
|
@@ -20,6 +20,7 @@ module EventStore
|
|
20
20
|
rpc :Append, stream(::EventStore::Client::Streams::AppendReq), ::EventStore::Client::Streams::AppendResp
|
21
21
|
rpc :Delete, ::EventStore::Client::Streams::DeleteReq, ::EventStore::Client::Streams::DeleteResp
|
22
22
|
rpc :Tombstone, ::EventStore::Client::Streams::TombstoneReq, ::EventStore::Client::Streams::TombstoneResp
|
23
|
+
rpc :BatchAppend, stream(::EventStore::Client::Streams::BatchAppendReq), stream(::EventStore::Client::Streams::BatchAppendResp)
|
23
24
|
end
|
24
25
|
|
25
26
|
Stub = Service.rpc_stub_class
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# Source: users.proto for package 'event_store.client.users'
|
3
3
|
|
4
4
|
require 'grpc'
|
5
|
-
|
5
|
+
require_relative 'users_pb'
|
6
6
|
|
7
7
|
module EventStore
|
8
8
|
module Client
|
@@ -10,7 +10,7 @@ module EventStore
|
|
10
10
|
module Users
|
11
11
|
class Service
|
12
12
|
|
13
|
-
include GRPC::GenericService
|
13
|
+
include ::GRPC::GenericService
|
14
14
|
|
15
15
|
self.marshal_class_method = :encode
|
16
16
|
self.unmarshal_class_method = :decode
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/AbcSize
|
4
|
+
|
5
|
+
require 'event_store_client/adapters/grpc/generated/shared_pb'
|
6
|
+
|
7
|
+
module EventStoreClient
|
8
|
+
module GRPC
|
9
|
+
module Options
|
10
|
+
module Streams
|
11
|
+
class ReadOptions
|
12
|
+
include Configuration
|
13
|
+
|
14
|
+
attr_reader :options, :stream_name
|
15
|
+
private :options, :stream_name
|
16
|
+
|
17
|
+
# @param stream_name [String]
|
18
|
+
# @param options [Hash]
|
19
|
+
# @option [String] :direction 'Forwards' or 'Backwards'
|
20
|
+
# @option [Integer] :max_count
|
21
|
+
# @option [Boolean] :resolve_link_tos
|
22
|
+
# @option [Symbol] :from_revision :start or :end. Works only for regular streams.
|
23
|
+
# @option [Integer] :from_revision revision number to start from. Remember, that all reads
|
24
|
+
# are inclusive and all subscribes are exclusive. This means if you provide revision
|
25
|
+
# number when reading from stream - the first event will be an event of revision number
|
26
|
+
# you provided. And, when subscribing on stream - the first event will be an event next
|
27
|
+
# to the event of revision number you provided. Works only for regular streams.
|
28
|
+
# @option [Symbol] :from_position :start or :end. Works only for $all streams.
|
29
|
+
# @option [Hash] :from_position provided a hash with either both :commit_position and
|
30
|
+
# :prepare_position keys or with one of them to define the starting position. Remember,
|
31
|
+
# that all reads are inclusive and all subscribes are exclusive. This means if you
|
32
|
+
# provide position number when reading from stream - the first event will be an event of
|
33
|
+
# position number you provided. And, when subscribing on stream - the first event will
|
34
|
+
# be an event next to the event of position number you provided. Works only for $all
|
35
|
+
# streams. Unlike :from_revision - :commit_position and :prepare_position should contain
|
36
|
+
# values of existing event.
|
37
|
+
# Example:
|
38
|
+
# ```ruby
|
39
|
+
# new('some-stream', from_position: { commit_position: 1024, prepare_position: 1024 })
|
40
|
+
# ```
|
41
|
+
# @option [Hash] :filter see
|
42
|
+
# {EventStoreClient::GRPC::Shared::Options::FilterOptions#initialize} for available
|
43
|
+
# values
|
44
|
+
def initialize(stream_name, options)
|
45
|
+
@stream_name = stream_name
|
46
|
+
@options = options
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [Hash] see event_store.client.streams.ReadReq.Options for available options
|
50
|
+
def request_options
|
51
|
+
request_options = {}
|
52
|
+
request_options.merge!(
|
53
|
+
Shared::Options::StreamOptions.new(stream_name, options).request_options
|
54
|
+
)
|
55
|
+
request_options[:read_direction] = options[:direction]
|
56
|
+
request_options[:count] = options[:max_count] || config.per_page
|
57
|
+
request_options[:resolve_links] = options[:resolve_link_tos]
|
58
|
+
request_options.merge!(
|
59
|
+
Shared::Options::FilterOptions.new(options[:filter]).request_options
|
60
|
+
)
|
61
|
+
# This option means how event#id would look like in the response. If you provided
|
62
|
+
# :string key, then #id will be a normal UUID string. If you provided :structured
|
63
|
+
# key, then #id will be an instance of EventStore::Client::UUID::Structured class.
|
64
|
+
# Note: for some reason if you don't provide this option - the request hangs forever
|
65
|
+
# Examples:
|
66
|
+
# <EventStore::Client::UUID::Structured:
|
67
|
+
# most_significant_bits: 1266766466329758182,
|
68
|
+
# least_significant_bits: -8366670759139390653>
|
69
|
+
# <EventStore::Client::UUID: string: "f0e1771c-334b-4b8d-ad88-c2024ccbe141">
|
70
|
+
request_options[:uuid_option] = { string: EventStore::Client::Empty.new }
|
71
|
+
request_options
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
# rubocop:enable Metrics/AbcSize
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'event_store_client/adapters/grpc/generated/shared_pb'
|
4
|
+
|
5
|
+
module EventStoreClient
|
6
|
+
module GRPC
|
7
|
+
module Options
|
8
|
+
module Streams
|
9
|
+
class WriteOptions
|
10
|
+
attr_reader :stream_name, :options
|
11
|
+
private :stream_name, :options
|
12
|
+
|
13
|
+
# @param stream_name [String]
|
14
|
+
# @param options [Hash]
|
15
|
+
# @option [Integer] :expected_revision
|
16
|
+
# @option [Symbol] :expected_revision either :any, :no_stream or :stream_exists
|
17
|
+
def initialize(stream_name, options)
|
18
|
+
@stream_name = stream_name
|
19
|
+
@options = options
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Hash] see event_store.client.streams.AppendReq.Options for available options
|
23
|
+
def request_options
|
24
|
+
revision_opt =
|
25
|
+
case options[:expected_revision]
|
26
|
+
when :any, :no_stream, :stream_exists
|
27
|
+
{ options[:expected_revision] => EventStore::Client::Empty.new }
|
28
|
+
when Integer
|
29
|
+
{ revision: options[:expected_revision] }
|
30
|
+
else
|
31
|
+
{ any: EventStore::Client::Empty.new }
|
32
|
+
end
|
33
|
+
revision_opt.merge(stream_identifier: { stream_name: stream_name })
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/AbcSize
|
4
|
+
|
5
|
+
module EventStoreClient
|
6
|
+
module GRPC
|
7
|
+
module Shared
|
8
|
+
class EventDeserializer
|
9
|
+
include Configuration
|
10
|
+
|
11
|
+
# @param raw_event [
|
12
|
+
# Array<EventStore::Client::Streams::ReadResp::ReadEvent::RecordedEvent>,
|
13
|
+
# Array<EventStore::Client::PersistentSubscriptions::ReadResp::ReadEvent::RecordedEvent>
|
14
|
+
# ]
|
15
|
+
# @param skip_decryption [Boolean]
|
16
|
+
# @return [EventStoreClient::DeserializedEvent]
|
17
|
+
def call(raw_event, skip_decryption: false)
|
18
|
+
data = normalize_serialized(raw_event.data)
|
19
|
+
custom_metadata = normalize_serialized(raw_event.custom_metadata)
|
20
|
+
|
21
|
+
metadata =
|
22
|
+
JSON.parse(custom_metadata).merge(raw_event.metadata.to_h).to_json
|
23
|
+
|
24
|
+
event = EventStoreClient::Event.new(
|
25
|
+
id: raw_event.id.string,
|
26
|
+
title: "#{raw_event.stream_revision}@#{raw_event.stream_identifier.stream_name}",
|
27
|
+
type: raw_event.metadata['type'],
|
28
|
+
data: data,
|
29
|
+
metadata: metadata,
|
30
|
+
stream_revision: raw_event.stream_revision,
|
31
|
+
commit_position: raw_event.commit_position,
|
32
|
+
prepare_position: raw_event.prepare_position,
|
33
|
+
stream_name: raw_event.stream_identifier.stream_name
|
34
|
+
)
|
35
|
+
|
36
|
+
config.mapper.deserialize(event, skip_decryption: skip_decryption)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# @param raw_data [String, nil]
|
42
|
+
# @return [String]
|
43
|
+
def normalize_serialized(raw_data)
|
44
|
+
return {}.to_json if raw_data.nil? || raw_data.empty?
|
45
|
+
|
46
|
+
raw_data
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
# rubocop:enable Metrics/AbcSize
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'event_store_client/adapters/grpc/generated/shared_pb'
|
4
|
+
|
5
|
+
module EventStoreClient
|
6
|
+
module GRPC
|
7
|
+
module Shared
|
8
|
+
module Options
|
9
|
+
class FilterOptions
|
10
|
+
attr_reader :options
|
11
|
+
private :options
|
12
|
+
|
13
|
+
# See event_store.client.streams.ReadReq.Options.FilterOptions in streams_pb.rb generated
|
14
|
+
# file for more info(for persisted subscription the structure is the same)
|
15
|
+
# @param filter_options [Hash, nil]
|
16
|
+
# @option [Integer] :checkpointIntervalMultiplier
|
17
|
+
# @option [Integer] :max
|
18
|
+
# @option [Boolean] :count
|
19
|
+
# @option [Hash] :stream_identifier filter events by stream name using Regexp or String.
|
20
|
+
# Examples:
|
21
|
+
# ```ruby
|
22
|
+
# # Return events streams names of which end with number
|
23
|
+
# new(stream_identifier: { regex: /.*\d$/.to_s })
|
24
|
+
# # Return events streams names of which start from 'some-stream-1' or 'some-stream-2'
|
25
|
+
# # strings
|
26
|
+
# new(stream_identifier: { prefix: ['some-stream-1', 'some-stream-2'] })
|
27
|
+
# ```
|
28
|
+
# @option [Hash] :event_type filter events by event name using Regexp or String.
|
29
|
+
# Examples:
|
30
|
+
# ```ruby
|
31
|
+
# # Return events names of which end with number
|
32
|
+
# new(event_type: { regex: /.*\d$/.to_s })
|
33
|
+
# # Return events names of which start from 'some-event-1' or 'some-event-2'
|
34
|
+
# # strings
|
35
|
+
# new(event_type: { prefix: ['some-event-1', 'some-event-2'] })
|
36
|
+
# ```
|
37
|
+
def initialize(filter_options)
|
38
|
+
@options = filter_options
|
39
|
+
end
|
40
|
+
|
41
|
+
# See :filter_option in persistent_pb.rb or in streams_pb.rb generated files
|
42
|
+
# @return [Hash]
|
43
|
+
def request_options
|
44
|
+
request_options = {}
|
45
|
+
case options
|
46
|
+
in { stream_identifier: { regex: String } } | { stream_identifier: { prefix: Array } } |
|
47
|
+
{ event_type: { regex: String } } | { event_type: { prefix: Array } }
|
48
|
+
request_options[:filter] = options
|
49
|
+
add_window_options(request_options)
|
50
|
+
else
|
51
|
+
request_options[:no_filter] = EventStore::Client::Empty.new
|
52
|
+
end
|
53
|
+
request_options
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
# Define how frequently "checkpoint" event should be produced. Its value is calculated
|
59
|
+
# by multiplying max by checkpointIntervalMultiplier.
|
60
|
+
# Example:
|
61
|
+
# Given max 32 and multiplier 2 - "checkpoint" event will be produced on each
|
62
|
+
# 64' event
|
63
|
+
# These options are only useful when subscribing to the stream
|
64
|
+
# @return [void]
|
65
|
+
def add_window_options(request_options)
|
66
|
+
request_options[:filter][:max] ||= 100
|
67
|
+
if request_options[:filter][:count]
|
68
|
+
request_options[:filter][:count] = EventStore::Client::Empty.new
|
69
|
+
end
|
70
|
+
request_options[:filter][:checkpointIntervalMultiplier] ||= 1
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|