stream-chat-ruby 2.19.0 → 2.22.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/.rubocop.yml +3 -0
- data/CHANGELOG.md +30 -0
- data/CONTRIBUTING.md +64 -0
- data/Gemfile +1 -0
- data/README.md +69 -117
- data/lib/stream-chat/channel.rb +78 -15
- data/lib/stream-chat/client.rb +178 -30
- data/lib/stream-chat/errors.rb +22 -9
- data/lib/stream-chat/stream_rate_limits.rb +16 -5
- data/lib/stream-chat/stream_response.rb +21 -8
- data/lib/stream-chat/types.rb +13 -0
- data/lib/stream-chat/util.rb +16 -6
- data/lib/stream-chat/version.rb +2 -3
- data/lib/stream-chat.rb +2 -1
- data/stream-chat.gemspec +2 -1
- metadata +18 -2
data/lib/stream-chat/client.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
|
+
# typed: strict
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
|
-
# lib/client.rb
|
4
4
|
require 'open-uri'
|
5
5
|
require 'faraday'
|
6
6
|
require 'faraday/multipart'
|
7
7
|
require 'faraday/net_http_persistent'
|
8
8
|
require 'jwt'
|
9
9
|
require 'time'
|
10
|
+
require 'sorbet-runtime'
|
10
11
|
require 'stream-chat/channel'
|
11
12
|
require 'stream-chat/errors'
|
12
13
|
require 'stream-chat/stream_response'
|
13
14
|
require 'stream-chat/version'
|
14
15
|
require 'stream-chat/util'
|
16
|
+
require 'stream-chat/types'
|
15
17
|
|
16
18
|
module StreamChat
|
17
19
|
DEFAULT_BLOCKLIST = 'profanity_en_2020_v1'
|
@@ -19,34 +21,44 @@ module StreamChat
|
|
19
21
|
HARD_DELETE = 'hard'
|
20
22
|
|
21
23
|
class Client
|
24
|
+
extend T::Sig
|
25
|
+
T::Configuration.default_checked_level = :never
|
26
|
+
# For now we disable runtime type checks.
|
27
|
+
# We will enable it with a major bump in the future,
|
28
|
+
# but for now, let's just run a static type check.
|
29
|
+
|
22
30
|
DEFAULT_BASE_URL = 'https://chat.stream-io-api.com'
|
23
31
|
DEFAULT_TIMEOUT = 6.0
|
24
32
|
|
33
|
+
sig { returns(String) }
|
25
34
|
attr_reader :api_key
|
35
|
+
|
36
|
+
sig { returns(String) }
|
26
37
|
attr_reader :api_secret
|
38
|
+
|
39
|
+
sig { returns(Faraday::Connection) }
|
27
40
|
attr_reader :conn
|
28
|
-
attr_reader :options
|
29
41
|
|
30
42
|
# initializes a Stream Chat API Client
|
31
43
|
#
|
32
44
|
# @param [string] api_key your application api_key
|
33
45
|
# @param [string] api_secret your application secret
|
34
46
|
# @param [float] timeout the timeout for the http requests
|
35
|
-
# @param [
|
47
|
+
# @param [Hash] options extra options such as base_url
|
36
48
|
#
|
37
49
|
# @example initialized the client with a timeout setting
|
38
50
|
# StreamChat::Client.new('my_key', 'my_secret', 3.0)
|
39
51
|
#
|
52
|
+
sig { params(api_key: String, api_secret: String, timeout: T.nilable(T.any(Float, String)), options: T.untyped).void }
|
40
53
|
def initialize(api_key, api_secret, timeout = nil, **options)
|
41
54
|
raise ArgumentError, 'api_key and api_secret are required' if api_key.to_s.empty? || api_secret.to_s.empty?
|
42
55
|
|
43
56
|
@api_key = api_key
|
44
57
|
@api_secret = api_secret
|
45
|
-
@timeout = timeout || DEFAULT_TIMEOUT
|
46
|
-
@
|
47
|
-
@
|
48
|
-
|
49
|
-
@conn = Faraday.new(url: @base_url) do |faraday|
|
58
|
+
@timeout = T.let(timeout&.to_f || DEFAULT_TIMEOUT, Float)
|
59
|
+
@auth_token = T.let(JWT.encode({ server: true }, @api_secret, 'HS256'), String)
|
60
|
+
@base_url = T.let(options[:base_url] || DEFAULT_BASE_URL, String)
|
61
|
+
conn = Faraday.new(@base_url) do |faraday|
|
50
62
|
faraday.options[:open_timeout] = @timeout
|
51
63
|
faraday.options[:timeout] = @timeout
|
52
64
|
faraday.request :multipart
|
@@ -55,15 +67,17 @@ module StreamChat
|
|
55
67
|
http.idle_timeout = 59
|
56
68
|
end
|
57
69
|
end
|
70
|
+
@conn = T.let(conn, Faraday::Connection)
|
58
71
|
end
|
59
72
|
|
60
73
|
# initializes a Stream Chat API Client from STREAM_KEY and STREAM_SECRET
|
61
74
|
# environmental variables. STREAM_CHAT_TIMEOUT and STREAM_CHAT_URL
|
62
75
|
# variables are optional.
|
63
|
-
# @param [
|
76
|
+
# @param [StringKeyHash] options extra options
|
77
|
+
sig { params(options: T.untyped).returns(Client) }
|
64
78
|
def self.from_env(**options)
|
65
|
-
Client.new(ENV['STREAM_KEY'],
|
66
|
-
ENV['STREAM_SECRET'],
|
79
|
+
Client.new(T.must(ENV['STREAM_KEY']),
|
80
|
+
T.must(ENV['STREAM_SECRET']),
|
67
81
|
ENV['STREAM_CHAT_TIMEOUT'],
|
68
82
|
**{ base_url: ENV['STREAM_CHAT_URL'] }.merge(options))
|
69
83
|
end
|
@@ -71,10 +85,12 @@ module StreamChat
|
|
71
85
|
# Sets the underlying Faraday http client.
|
72
86
|
#
|
73
87
|
# @param [client] an instance of Faraday::Connection
|
88
|
+
sig { params(client: Faraday::Connection).void }
|
74
89
|
def set_http_client(client)
|
75
90
|
@conn = client
|
76
91
|
end
|
77
92
|
|
93
|
+
sig { params(user_id: String, exp: T.nilable(Integer), iat: T.nilable(Integer)).returns(String) }
|
78
94
|
def create_token(user_id, exp = nil, iat = nil)
|
79
95
|
payload = { user_id: user_id }
|
80
96
|
payload['exp'] = exp unless exp.nil?
|
@@ -82,24 +98,29 @@ module StreamChat
|
|
82
98
|
JWT.encode(payload, @api_secret, 'HS256')
|
83
99
|
end
|
84
100
|
|
101
|
+
sig { params(settings: T.untyped).returns(StreamChat::StreamResponse) }
|
85
102
|
def update_app_settings(**settings)
|
86
|
-
patch('app',
|
103
|
+
patch('app', data: settings)
|
87
104
|
end
|
88
105
|
|
106
|
+
sig { returns(StreamChat::StreamResponse) }
|
89
107
|
def get_app_settings
|
90
108
|
get('app')
|
91
109
|
end
|
92
110
|
|
111
|
+
sig { params(id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
93
112
|
def flag_message(id, **options)
|
94
113
|
payload = { target_message_id: id }.merge(options)
|
95
114
|
post('moderation/flag', data: payload)
|
96
115
|
end
|
97
116
|
|
117
|
+
sig { params(id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
98
118
|
def unflag_message(id, **options)
|
99
119
|
payload = { target_message_id: id }.merge(options)
|
100
120
|
post('moderation/unflag', data: payload)
|
101
121
|
end
|
102
122
|
|
123
|
+
sig { params(filter_conditions: StringKeyHash, options: T.untyped).returns(StreamChat::StreamResponse) }
|
103
124
|
def query_message_flags(filter_conditions, **options)
|
104
125
|
params = options.merge({
|
105
126
|
filter_conditions: filter_conditions
|
@@ -107,28 +128,48 @@ module StreamChat
|
|
107
128
|
get('moderation/flags/message', params: { payload: params.to_json })
|
108
129
|
end
|
109
130
|
|
131
|
+
sig { params(id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
110
132
|
def flag_user(id, **options)
|
111
133
|
payload = { target_user_id: id }.merge(options)
|
112
134
|
post('moderation/flag', data: payload)
|
113
135
|
end
|
114
136
|
|
137
|
+
sig { params(id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
115
138
|
def unflag_user(id, **options)
|
116
139
|
payload = { target_user_id: id }.merge(options)
|
117
140
|
post('moderation/unflag', data: payload)
|
118
141
|
end
|
119
142
|
|
143
|
+
sig { params(options: T.untyped).returns(StreamChat::StreamResponse) }
|
144
|
+
def query_flag_reports(**options)
|
145
|
+
data = { filter_conditions: options }
|
146
|
+
post('moderation/reports', data: data)
|
147
|
+
end
|
148
|
+
|
149
|
+
sig { params(report_id: String, review_result: String, user_id: String, details: T.untyped).returns(StreamChat::StreamResponse) }
|
150
|
+
def review_flag_report(report_id, review_result, user_id, **details)
|
151
|
+
data = {
|
152
|
+
review_result: review_result,
|
153
|
+
user_id: user_id,
|
154
|
+
review_details: details
|
155
|
+
}
|
156
|
+
patch("moderation/reports/#{report_id}", data: data)
|
157
|
+
end
|
158
|
+
|
159
|
+
sig { params(id: String).returns(StreamChat::StreamResponse) }
|
120
160
|
def get_message(id)
|
121
161
|
get("messages/#{id}")
|
122
162
|
end
|
123
163
|
|
164
|
+
sig { params(filter_conditions: StringKeyHash, query: T.any(String, StringKeyHash), sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
124
165
|
def search(filter_conditions, query, sort: nil, **options)
|
125
|
-
offset = options[:offset]
|
166
|
+
offset = T.cast(options[:offset], T.nilable(Integer))
|
126
167
|
next_value = options[:next]
|
127
168
|
raise ArgumentError, 'cannot use offset with next or sort parameters' if offset&.positive? && (next_value || (!sort.nil? && !sort.empty?))
|
128
169
|
|
129
170
|
to_merge = {
|
130
171
|
filter_conditions: filter_conditions,
|
131
|
-
sort: get_sort_fields(sort)
|
172
|
+
sort: StreamChat.get_sort_fields(sort)
|
132
173
|
}
|
133
174
|
if query.is_a? String
|
134
175
|
to_merge[:query] = query
|
@@ -138,7 +179,22 @@ module StreamChat
|
|
138
179
|
get('search', params: { payload: options.merge(to_merge).to_json })
|
139
180
|
end
|
140
181
|
|
182
|
+
# <b>DEPRECATED:</b> Please use <tt>upsert_users</tt> instead.
|
183
|
+
sig { params(users: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
|
141
184
|
def update_users(users)
|
185
|
+
warn '[DEPRECATION] `update_users` is deprecated. Please use `upsert_users` instead.'
|
186
|
+
upsert_users(users)
|
187
|
+
end
|
188
|
+
|
189
|
+
# <b>DEPRECATED:</b> Please use <tt>upsert_user</tt> instead.
|
190
|
+
sig { params(user: StringKeyHash).returns(StreamChat::StreamResponse) }
|
191
|
+
def update_user(user)
|
192
|
+
warn '[DEPRECATION] `update_user` is deprecated. Please use `upsert_user` instead.'
|
193
|
+
upsert_user(user)
|
194
|
+
end
|
195
|
+
|
196
|
+
sig { params(users: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
|
197
|
+
def upsert_users(users)
|
142
198
|
payload = {}
|
143
199
|
users.each do |user|
|
144
200
|
id = user[:id] || user['id']
|
@@ -149,69 +205,84 @@ module StreamChat
|
|
149
205
|
post('users', data: { users: payload })
|
150
206
|
end
|
151
207
|
|
152
|
-
|
153
|
-
|
208
|
+
sig { params(user: StringKeyHash).returns(StreamChat::StreamResponse) }
|
209
|
+
def upsert_user(user)
|
210
|
+
upsert_users([user])
|
154
211
|
end
|
155
212
|
|
213
|
+
sig { params(updates: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
|
156
214
|
def update_users_partial(updates)
|
157
215
|
patch('users', data: { users: updates })
|
158
216
|
end
|
159
217
|
|
218
|
+
sig { params(update: StringKeyHash).returns(StreamChat::StreamResponse) }
|
160
219
|
def update_user_partial(update)
|
161
220
|
update_users_partial([update])
|
162
221
|
end
|
163
222
|
|
223
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
164
224
|
def delete_user(user_id, **options)
|
165
225
|
delete("users/#{user_id}", params: options)
|
166
226
|
end
|
167
227
|
|
228
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
168
229
|
def deactivate_user(user_id, **options)
|
169
|
-
post("users/#{user_id}/deactivate",
|
230
|
+
post("users/#{user_id}/deactivate", params: options)
|
170
231
|
end
|
171
232
|
|
233
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
172
234
|
def reactivate_user(user_id, **options)
|
173
|
-
post("users/#{user_id}/reactivate",
|
235
|
+
post("users/#{user_id}/reactivate", params: options)
|
174
236
|
end
|
175
237
|
|
238
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
176
239
|
def export_user(user_id, **options)
|
177
240
|
get("users/#{user_id}/export", params: options)
|
178
241
|
end
|
179
242
|
|
243
|
+
sig { params(target_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
180
244
|
def ban_user(target_id, **options)
|
181
245
|
payload = { target_user_id: target_id }.merge(options)
|
182
246
|
post('moderation/ban', data: payload)
|
183
247
|
end
|
184
248
|
|
249
|
+
sig { params(target_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
185
250
|
def unban_user(target_id, **options)
|
186
251
|
params = { target_user_id: target_id }.merge(options)
|
187
252
|
delete('moderation/ban', params: params)
|
188
253
|
end
|
189
254
|
|
255
|
+
sig { params(target_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
190
256
|
def shadow_ban(target_id, **options)
|
191
257
|
payload = { target_user_id: target_id, shadow: true }.merge(options)
|
192
258
|
post('moderation/ban', data: payload)
|
193
259
|
end
|
194
260
|
|
261
|
+
sig { params(target_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
195
262
|
def remove_shadow_ban(target_id, **options)
|
196
263
|
params = { target_user_id: target_id, shadow: true }.merge(options)
|
197
264
|
delete('moderation/ban', params: params)
|
198
265
|
end
|
199
266
|
|
267
|
+
sig { params(target_id: String, user_id: String).returns(StreamChat::StreamResponse) }
|
200
268
|
def mute_user(target_id, user_id)
|
201
269
|
payload = { target_id: target_id, user_id: user_id }
|
202
270
|
post('moderation/mute', data: payload)
|
203
271
|
end
|
204
272
|
|
273
|
+
sig { params(target_id: String, user_id: String).returns(StreamChat::StreamResponse) }
|
205
274
|
def unmute_user(target_id, user_id)
|
206
275
|
payload = { target_id: target_id, user_id: user_id }
|
207
276
|
post('moderation/unmute', data: payload)
|
208
277
|
end
|
209
278
|
|
279
|
+
sig { params(user_id: String).returns(StreamChat::StreamResponse) }
|
210
280
|
def mark_all_read(user_id)
|
211
281
|
payload = { user: { id: user_id } }
|
212
282
|
post('channels/read', data: payload)
|
213
283
|
end
|
214
284
|
|
285
|
+
sig { params(message_id: String, user_id: String, expiration: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
215
286
|
def pin_message(message_id, user_id, expiration: nil)
|
216
287
|
updates = {
|
217
288
|
set: {
|
@@ -222,6 +293,7 @@ module StreamChat
|
|
222
293
|
update_message_partial(message_id, updates, user_id: user_id)
|
223
294
|
end
|
224
295
|
|
296
|
+
sig { params(message_id: String, user_id: String).returns(StreamChat::StreamResponse) }
|
225
297
|
def unpin_message(message_id, user_id)
|
226
298
|
updates = {
|
227
299
|
set: {
|
@@ -231,64 +303,75 @@ module StreamChat
|
|
231
303
|
update_message_partial(message_id, updates, user_id: user_id)
|
232
304
|
end
|
233
305
|
|
306
|
+
sig { params(message: StringKeyHash).returns(StreamChat::StreamResponse) }
|
234
307
|
def update_message(message)
|
235
|
-
raise ArgumentError 'message must have an id' unless message.key? 'id'
|
308
|
+
raise ArgumentError, 'message must have an id' unless message.key? 'id'
|
236
309
|
|
237
310
|
post("messages/#{message['id']}", data: { message: message })
|
238
311
|
end
|
239
312
|
|
313
|
+
sig { params(message_id: String, updates: StringKeyHash, user_id: T.nilable(String), options: T.untyped).returns(StreamChat::StreamResponse) }
|
240
314
|
def update_message_partial(message_id, updates, user_id: nil, **options)
|
241
315
|
params = updates.merge(options)
|
242
316
|
params['user'] = { id: user_id } if user_id
|
243
317
|
put("messages/#{message_id}", data: params)
|
244
318
|
end
|
245
319
|
|
246
|
-
|
247
|
-
|
320
|
+
sig { params(message_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
321
|
+
def delete_message(message_id, **options)
|
322
|
+
delete("messages/#{message_id}", params: options)
|
248
323
|
end
|
249
324
|
|
325
|
+
sig { params(filter_conditions: StringKeyHash, sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
250
326
|
def query_banned_users(filter_conditions, sort: nil, **options)
|
251
327
|
params = options.merge({
|
252
328
|
filter_conditions: filter_conditions,
|
253
|
-
sort: get_sort_fields(sort)
|
329
|
+
sort: StreamChat.get_sort_fields(sort)
|
254
330
|
})
|
255
331
|
get('query_banned_users', params: { payload: params.to_json })
|
256
332
|
end
|
257
333
|
|
334
|
+
sig { params(filter_conditions: StringKeyHash, sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
258
335
|
def query_users(filter_conditions, sort: nil, **options)
|
259
336
|
params = options.merge({
|
260
337
|
filter_conditions: filter_conditions,
|
261
|
-
sort: get_sort_fields(sort)
|
338
|
+
sort: StreamChat.get_sort_fields(sort)
|
262
339
|
})
|
263
340
|
get('users', params: { payload: params.to_json })
|
264
341
|
end
|
265
342
|
|
343
|
+
sig { params(filter_conditions: StringKeyHash, sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
266
344
|
def query_channels(filter_conditions, sort: nil, **options)
|
267
345
|
data = { state: true, watch: false, presence: false }
|
268
346
|
data = data.merge(options).merge({
|
269
347
|
filter_conditions: filter_conditions,
|
270
|
-
sort: get_sort_fields(sort)
|
348
|
+
sort: StreamChat.get_sort_fields(sort)
|
271
349
|
})
|
272
350
|
post('channels', data: data)
|
273
351
|
end
|
274
352
|
|
353
|
+
sig { params(data: StringKeyHash).returns(StreamChat::StreamResponse) }
|
275
354
|
def create_channel_type(data)
|
276
355
|
data['commands'] = ['all'] unless data.key?('commands') || data['commands'].nil? || data['commands'].empty?
|
277
356
|
post('channeltypes', data: data)
|
278
357
|
end
|
279
358
|
|
359
|
+
sig { params(channel_type: String).returns(StreamChat::StreamResponse) }
|
280
360
|
def get_channel_type(channel_type)
|
281
361
|
get("channeltypes/#{channel_type}")
|
282
362
|
end
|
283
363
|
|
364
|
+
sig { returns(StreamChat::StreamResponse) }
|
284
365
|
def list_channel_types
|
285
366
|
get('channeltypes')
|
286
367
|
end
|
287
368
|
|
369
|
+
sig { params(channel_type: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
288
370
|
def update_channel_type(channel_type, **options)
|
289
371
|
put("channeltypes/#{channel_type}", data: options)
|
290
372
|
end
|
291
373
|
|
374
|
+
sig { params(channel_type: String).returns(StreamChat::StreamResponse) }
|
292
375
|
def delete_channel_type(channel_type)
|
293
376
|
delete("channeltypes/#{channel_type}")
|
294
377
|
end
|
@@ -297,30 +380,36 @@ module StreamChat
|
|
297
380
|
#
|
298
381
|
# @param [string] channel_type the channel type
|
299
382
|
# @param [string] channel_id the channel identifier
|
300
|
-
# @param [
|
383
|
+
# @param [StringKeyHash] data additional channel data
|
301
384
|
#
|
302
385
|
# @return [StreamChat::Channel]
|
303
386
|
#
|
387
|
+
sig { params(channel_type: String, channel_id: T.nilable(String), data: T.nilable(StringKeyHash)).returns(StreamChat::Channel) }
|
304
388
|
def channel(channel_type, channel_id: nil, data: nil)
|
305
389
|
StreamChat::Channel.new(self, channel_type, channel_id, data)
|
306
390
|
end
|
307
391
|
|
308
|
-
|
392
|
+
sig { params(device_id: String, push_provider: String, user_id: String, push_provider_name: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
393
|
+
def add_device(device_id, push_provider, user_id, push_provider_name = nil)
|
309
394
|
post('devices', data: {
|
310
395
|
id: device_id,
|
311
396
|
push_provider: push_provider,
|
397
|
+
push_provider_name: push_provider_name,
|
312
398
|
user_id: user_id
|
313
399
|
})
|
314
400
|
end
|
315
401
|
|
402
|
+
sig { params(device_id: String, user_id: String).returns(StreamChat::StreamResponse) }
|
316
403
|
def delete_device(device_id, user_id)
|
317
404
|
delete('devices', params: { id: device_id, user_id: user_id })
|
318
405
|
end
|
319
406
|
|
407
|
+
sig { params(user_id: String).returns(StreamChat::StreamResponse) }
|
320
408
|
def get_devices(user_id)
|
321
409
|
get('devices', params: { user_id: user_id })
|
322
410
|
end
|
323
411
|
|
412
|
+
sig { params(server_side: T::Boolean, android: T::Boolean, ios: T::Boolean, web: T::Boolean, endpoints: T::Array[String]).returns(StreamChat::StreamResponse) }
|
324
413
|
def get_rate_limits(server_side: false, android: false, ios: false, web: false, endpoints: [])
|
325
414
|
params = {}
|
326
415
|
params['server_side'] = server_side if server_side
|
@@ -332,78 +421,96 @@ module StreamChat
|
|
332
421
|
get('rate_limits', params: params)
|
333
422
|
end
|
334
423
|
|
424
|
+
sig { params(request_body: String, x_signature: String).returns(T::Boolean) }
|
335
425
|
def verify_webhook(request_body, x_signature)
|
336
426
|
signature = OpenSSL::HMAC.hexdigest('SHA256', @api_secret, request_body)
|
337
427
|
signature == x_signature
|
338
428
|
end
|
339
429
|
|
430
|
+
sig { params(user_id: String, event: StringKeyHash).returns(StreamChat::StreamResponse) }
|
340
431
|
def send_user_event(user_id, event)
|
341
432
|
post("users/#{user_id}/event", data: event)
|
342
433
|
end
|
343
434
|
|
435
|
+
sig { params(message_id: String, language: String).returns(StreamChat::StreamResponse) }
|
344
436
|
def translate_message(message_id, language)
|
345
437
|
post("messages/#{message_id}/translate", data: { language: language })
|
346
438
|
end
|
347
439
|
|
440
|
+
sig { params(message_id: String, data: StringKeyHash).returns(StreamChat::StreamResponse) }
|
348
441
|
def run_message_action(message_id, data)
|
349
442
|
post("messages/#{message_id}/action", data: data)
|
350
443
|
end
|
351
444
|
|
445
|
+
sig { params(user: StringKeyHash).returns(StreamChat::StreamResponse) }
|
352
446
|
def create_guest(user)
|
353
447
|
post('guests', data: user)
|
354
448
|
end
|
355
449
|
|
450
|
+
sig { returns(StreamChat::StreamResponse) }
|
356
451
|
def list_blocklists
|
357
452
|
get('blocklists')
|
358
453
|
end
|
359
454
|
|
455
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
360
456
|
def get_blocklist(name)
|
361
457
|
get("blocklists/#{name}")
|
362
458
|
end
|
363
459
|
|
460
|
+
sig { params(name: String, words: StringKeyHash).returns(StreamChat::StreamResponse) }
|
364
461
|
def create_blocklist(name, words)
|
365
462
|
post('blocklists', data: { name: name, words: words })
|
366
463
|
end
|
367
464
|
|
465
|
+
sig { params(name: String, words: StringKeyHash).returns(StreamChat::StreamResponse) }
|
368
466
|
def update_blocklist(name, words)
|
369
467
|
put("blocklists/#{name}", data: { words: words })
|
370
468
|
end
|
371
469
|
|
470
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
372
471
|
def delete_blocklist(name)
|
373
472
|
delete("blocklists/#{name}")
|
374
473
|
end
|
375
474
|
|
475
|
+
sig { params(channels: StringKeyHash, options: T.untyped).returns(StreamChat::StreamResponse) }
|
376
476
|
def export_channels(*channels, **options)
|
377
477
|
post('export_channels', data: { channels: channels, **options })
|
378
478
|
end
|
379
479
|
|
480
|
+
sig { params(task_id: String).returns(StreamChat::StreamResponse) }
|
380
481
|
def get_export_channel_status(task_id)
|
381
482
|
get("export_channels/#{task_id}")
|
382
483
|
end
|
383
484
|
|
485
|
+
sig { params(task_id: String).returns(StreamChat::StreamResponse) }
|
384
486
|
def get_task(task_id)
|
385
487
|
get("tasks/#{task_id}")
|
386
488
|
end
|
387
489
|
|
490
|
+
sig { params(user_ids: T::Array[String], user: String, messages: T.nilable(StringKeyHash), conversations: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
388
491
|
def delete_users(user_ids, user: SOFT_DELETE, messages: nil, conversations: nil)
|
389
492
|
post('users/delete', data: { user_ids: user_ids, user: user, messages: messages, conversations: conversations })
|
390
493
|
end
|
391
494
|
|
495
|
+
sig { params(cids: T::Array[String], hard_delete: T::Boolean).returns(StreamChat::StreamResponse) }
|
392
496
|
def delete_channels(cids, hard_delete: false)
|
393
497
|
post('channels/delete', data: { cids: cids, hard_delete: hard_delete })
|
394
498
|
end
|
395
499
|
|
500
|
+
sig { params(before: T.any(DateTime, String)).returns(StreamChat::StreamResponse) }
|
396
501
|
def revoke_tokens(before)
|
397
|
-
before = before.rfc3339 if before.instance_of?(DateTime)
|
502
|
+
before = T.cast(before, DateTime).rfc3339 if before.instance_of?(DateTime)
|
398
503
|
update_app_settings({ 'revoke_tokens_issued_before' => before })
|
399
504
|
end
|
400
505
|
|
506
|
+
sig { params(user_id: String, before: T.any(DateTime, String)).returns(StreamChat::StreamResponse) }
|
401
507
|
def revoke_user_token(user_id, before)
|
402
508
|
revoke_users_token([user_id], before)
|
403
509
|
end
|
404
510
|
|
511
|
+
sig { params(user_ids: T::Array[String], before: T.any(DateTime, String)).returns(StreamChat::StreamResponse) }
|
405
512
|
def revoke_users_token(user_ids, before)
|
406
|
-
before = before.rfc3339 if before.instance_of?(DateTime)
|
513
|
+
before = T.cast(before, DateTime).rfc3339 if before.instance_of?(DateTime)
|
407
514
|
|
408
515
|
updates = []
|
409
516
|
user_ids.each do |user_id|
|
@@ -417,32 +524,38 @@ module StreamChat
|
|
417
524
|
update_users_partial(updates)
|
418
525
|
end
|
419
526
|
|
527
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
420
528
|
def put(relative_url, params: nil, data: nil)
|
421
529
|
make_http_request(:put, relative_url, params: params, data: data)
|
422
530
|
end
|
423
531
|
|
532
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
424
533
|
def post(relative_url, params: nil, data: nil)
|
425
534
|
make_http_request(:post, relative_url, params: params, data: data)
|
426
535
|
end
|
427
536
|
|
537
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
428
538
|
def get(relative_url, params: nil)
|
429
539
|
make_http_request(:get, relative_url, params: params)
|
430
540
|
end
|
431
541
|
|
542
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
432
543
|
def delete(relative_url, params: nil)
|
433
544
|
make_http_request(:delete, relative_url, params: params)
|
434
545
|
end
|
435
546
|
|
547
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
436
548
|
def patch(relative_url, params: nil, data: nil)
|
437
549
|
make_http_request(:patch, relative_url, params: params, data: data)
|
438
550
|
end
|
439
551
|
|
440
|
-
|
552
|
+
sig { params(relative_url: String, file_url: String, user: StringKeyHash, content_type: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
553
|
+
def send_file(relative_url, file_url, user, content_type = nil)
|
441
554
|
url = [@base_url, relative_url].join('/')
|
442
555
|
|
443
556
|
body = { user: user.to_json }
|
444
557
|
|
445
|
-
body[:file] = Faraday::UploadIO.new(file_url, content_type)
|
558
|
+
body[:file] = Faraday::UploadIO.new(file_url, content_type || 'application/octet-stream')
|
446
559
|
|
447
560
|
response = @conn.post url do |req|
|
448
561
|
req.headers['X-Stream-Client'] = get_user_agent
|
@@ -455,76 +568,109 @@ module StreamChat
|
|
455
568
|
parse_response(response)
|
456
569
|
end
|
457
570
|
|
571
|
+
sig { params(push_data: StringKeyHash).returns(StreamChat::StreamResponse) }
|
458
572
|
def check_push(push_data)
|
459
573
|
post('check_push', data: push_data)
|
460
574
|
end
|
461
575
|
|
576
|
+
sig { params(sqs_key: T.nilable(String), sqs_secret: T.nilable(String), sqs_url: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
462
577
|
def check_sqs(sqs_key = nil, sqs_secret = nil, sqs_url = nil)
|
463
578
|
post('check_sqs', data: { sqs_key: sqs_key, sqs_secret: sqs_secret, sqs_url: sqs_url })
|
464
579
|
end
|
465
580
|
|
581
|
+
sig { params(command: StringKeyHash).returns(StreamChat::StreamResponse) }
|
466
582
|
def create_command(command)
|
467
583
|
post('commands', data: command)
|
468
584
|
end
|
469
585
|
|
586
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
470
587
|
def get_command(name)
|
471
588
|
get("commands/#{name}")
|
472
589
|
end
|
473
590
|
|
591
|
+
sig { params(name: String, command: StringKeyHash).returns(StreamChat::StreamResponse) }
|
474
592
|
def update_command(name, command)
|
475
593
|
put("commands/#{name}", data: command)
|
476
594
|
end
|
477
595
|
|
596
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
478
597
|
def delete_command(name)
|
479
598
|
delete("commands/#{name}")
|
480
599
|
end
|
481
600
|
|
601
|
+
sig { returns(StreamChat::StreamResponse) }
|
482
602
|
def list_commands
|
483
603
|
get('commands')
|
484
604
|
end
|
485
605
|
|
606
|
+
sig { returns(StreamChat::StreamResponse) }
|
486
607
|
def list_permissions
|
487
608
|
get('permissions')
|
488
609
|
end
|
489
610
|
|
611
|
+
sig { params(id: String).returns(StreamChat::StreamResponse) }
|
490
612
|
def get_permission(id)
|
491
613
|
get("permissions/#{id}")
|
492
614
|
end
|
493
615
|
|
616
|
+
sig { params(permission: StringKeyHash).returns(StreamChat::StreamResponse) }
|
494
617
|
def create_permission(permission)
|
495
618
|
post('permissions', data: permission)
|
496
619
|
end
|
497
620
|
|
621
|
+
sig { params(id: String, permission: StringKeyHash).returns(StreamChat::StreamResponse) }
|
498
622
|
def update_permission(id, permission)
|
499
623
|
put("permissions/#{id}", data: permission)
|
500
624
|
end
|
501
625
|
|
626
|
+
sig { params(id: String).returns(StreamChat::StreamResponse) }
|
502
627
|
def delete_permission(id)
|
503
628
|
delete("permissions/#{id}")
|
504
629
|
end
|
505
630
|
|
631
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
506
632
|
def create_role(name)
|
507
633
|
post('roles', data: { name: name })
|
508
634
|
end
|
509
635
|
|
636
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
510
637
|
def delete_role(name)
|
511
638
|
delete("roles/#{name}")
|
512
639
|
end
|
513
640
|
|
641
|
+
sig { returns(StreamChat::StreamResponse) }
|
514
642
|
def list_roles
|
515
643
|
get('roles')
|
516
644
|
end
|
517
645
|
|
646
|
+
sig { params(push_provider: StringKeyHash).returns(StreamChat::StreamResponse) }
|
647
|
+
def upsert_push_provider(push_provider)
|
648
|
+
post('push_providers', data: { push_provider: push_provider })
|
649
|
+
end
|
650
|
+
|
651
|
+
sig { params(type: String, name: String).returns(StreamChat::StreamResponse) }
|
652
|
+
def delete_push_provider(type, name)
|
653
|
+
delete("push_providers/#{type}/#{name}")
|
654
|
+
end
|
655
|
+
|
656
|
+
sig { returns(StreamChat::StreamResponse) }
|
657
|
+
def list_push_providers
|
658
|
+
get('push_providers')
|
659
|
+
end
|
660
|
+
|
518
661
|
private
|
519
662
|
|
663
|
+
sig { returns(T::Hash[String, String]) }
|
520
664
|
def get_default_params
|
521
665
|
{ api_key: @api_key }
|
522
666
|
end
|
523
667
|
|
668
|
+
sig { returns(String) }
|
524
669
|
def get_user_agent
|
525
670
|
"stream-ruby-client-#{StreamChat::VERSION}"
|
526
671
|
end
|
527
672
|
|
673
|
+
sig { returns(T::Hash[String, String]) }
|
528
674
|
def get_default_headers
|
529
675
|
{
|
530
676
|
'Content-Type': 'application/json',
|
@@ -532,6 +678,7 @@ module StreamChat
|
|
532
678
|
}
|
533
679
|
end
|
534
680
|
|
681
|
+
sig { params(response: Faraday::Response).returns(StreamChat::StreamResponse) }
|
535
682
|
def parse_response(response)
|
536
683
|
begin
|
537
684
|
parsed_result = JSON.parse(response.body)
|
@@ -543,6 +690,7 @@ module StreamChat
|
|
543
690
|
StreamResponse.new(parsed_result, response)
|
544
691
|
end
|
545
692
|
|
693
|
+
sig { params(method: Symbol, relative_url: String, params: T.nilable(StringKeyHash), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
546
694
|
def make_http_request(method, relative_url, params: nil, data: nil)
|
547
695
|
headers = get_default_headers
|
548
696
|
headers['Authorization'] = @auth_token
|