stream-chat-ruby 2.20.0 → 2.21.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 +13 -0
- data/CONTRIBUTING.md +64 -0
- data/Gemfile +1 -0
- data/README.md +67 -115
- data/lib/stream-chat/channel.rb +58 -6
- data/lib/stream-chat/client.rb +129 -27
- 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,32 @@ 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(id: String).returns(StreamChat::StreamResponse) }
|
120
144
|
def get_message(id)
|
121
145
|
get("messages/#{id}")
|
122
146
|
end
|
123
147
|
|
148
|
+
sig { params(filter_conditions: StringKeyHash, query: T.any(String, StringKeyHash), sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
124
149
|
def search(filter_conditions, query, sort: nil, **options)
|
125
|
-
offset = options[:offset]
|
150
|
+
offset = T.cast(options[:offset], T.nilable(Integer))
|
126
151
|
next_value = options[:next]
|
127
152
|
raise ArgumentError, 'cannot use offset with next or sort parameters' if offset&.positive? && (next_value || (!sort.nil? && !sort.empty?))
|
128
153
|
|
129
154
|
to_merge = {
|
130
155
|
filter_conditions: filter_conditions,
|
131
|
-
sort: get_sort_fields(sort)
|
156
|
+
sort: StreamChat.get_sort_fields(sort)
|
132
157
|
}
|
133
158
|
if query.is_a? String
|
134
159
|
to_merge[:query] = query
|
@@ -138,6 +163,7 @@ module StreamChat
|
|
138
163
|
get('search', params: { payload: options.merge(to_merge).to_json })
|
139
164
|
end
|
140
165
|
|
166
|
+
sig { params(users: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
|
141
167
|
def update_users(users)
|
142
168
|
payload = {}
|
143
169
|
users.each do |user|
|
@@ -149,69 +175,84 @@ module StreamChat
|
|
149
175
|
post('users', data: { users: payload })
|
150
176
|
end
|
151
177
|
|
178
|
+
sig { params(user: StringKeyHash).returns(StreamChat::StreamResponse) }
|
152
179
|
def update_user(user)
|
153
180
|
update_users([user])
|
154
181
|
end
|
155
182
|
|
183
|
+
sig { params(updates: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
|
156
184
|
def update_users_partial(updates)
|
157
185
|
patch('users', data: { users: updates })
|
158
186
|
end
|
159
187
|
|
188
|
+
sig { params(update: StringKeyHash).returns(StreamChat::StreamResponse) }
|
160
189
|
def update_user_partial(update)
|
161
190
|
update_users_partial([update])
|
162
191
|
end
|
163
192
|
|
193
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
164
194
|
def delete_user(user_id, **options)
|
165
195
|
delete("users/#{user_id}", params: options)
|
166
196
|
end
|
167
197
|
|
198
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
168
199
|
def deactivate_user(user_id, **options)
|
169
|
-
post("users/#{user_id}/deactivate",
|
200
|
+
post("users/#{user_id}/deactivate", params: options)
|
170
201
|
end
|
171
202
|
|
203
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
172
204
|
def reactivate_user(user_id, **options)
|
173
|
-
post("users/#{user_id}/reactivate",
|
205
|
+
post("users/#{user_id}/reactivate", params: options)
|
174
206
|
end
|
175
207
|
|
208
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
176
209
|
def export_user(user_id, **options)
|
177
210
|
get("users/#{user_id}/export", params: options)
|
178
211
|
end
|
179
212
|
|
213
|
+
sig { params(target_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
180
214
|
def ban_user(target_id, **options)
|
181
215
|
payload = { target_user_id: target_id }.merge(options)
|
182
216
|
post('moderation/ban', data: payload)
|
183
217
|
end
|
184
218
|
|
219
|
+
sig { params(target_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
185
220
|
def unban_user(target_id, **options)
|
186
221
|
params = { target_user_id: target_id }.merge(options)
|
187
222
|
delete('moderation/ban', params: params)
|
188
223
|
end
|
189
224
|
|
225
|
+
sig { params(target_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
190
226
|
def shadow_ban(target_id, **options)
|
191
227
|
payload = { target_user_id: target_id, shadow: true }.merge(options)
|
192
228
|
post('moderation/ban', data: payload)
|
193
229
|
end
|
194
230
|
|
231
|
+
sig { params(target_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
195
232
|
def remove_shadow_ban(target_id, **options)
|
196
233
|
params = { target_user_id: target_id, shadow: true }.merge(options)
|
197
234
|
delete('moderation/ban', params: params)
|
198
235
|
end
|
199
236
|
|
237
|
+
sig { params(target_id: String, user_id: String).returns(StreamChat::StreamResponse) }
|
200
238
|
def mute_user(target_id, user_id)
|
201
239
|
payload = { target_id: target_id, user_id: user_id }
|
202
240
|
post('moderation/mute', data: payload)
|
203
241
|
end
|
204
242
|
|
243
|
+
sig { params(target_id: String, user_id: String).returns(StreamChat::StreamResponse) }
|
205
244
|
def unmute_user(target_id, user_id)
|
206
245
|
payload = { target_id: target_id, user_id: user_id }
|
207
246
|
post('moderation/unmute', data: payload)
|
208
247
|
end
|
209
248
|
|
249
|
+
sig { params(user_id: String).returns(StreamChat::StreamResponse) }
|
210
250
|
def mark_all_read(user_id)
|
211
251
|
payload = { user: { id: user_id } }
|
212
252
|
post('channels/read', data: payload)
|
213
253
|
end
|
214
254
|
|
255
|
+
sig { params(message_id: String, user_id: String, expiration: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
215
256
|
def pin_message(message_id, user_id, expiration: nil)
|
216
257
|
updates = {
|
217
258
|
set: {
|
@@ -222,6 +263,7 @@ module StreamChat
|
|
222
263
|
update_message_partial(message_id, updates, user_id: user_id)
|
223
264
|
end
|
224
265
|
|
266
|
+
sig { params(message_id: String, user_id: String).returns(StreamChat::StreamResponse) }
|
225
267
|
def unpin_message(message_id, user_id)
|
226
268
|
updates = {
|
227
269
|
set: {
|
@@ -231,64 +273,75 @@ module StreamChat
|
|
231
273
|
update_message_partial(message_id, updates, user_id: user_id)
|
232
274
|
end
|
233
275
|
|
276
|
+
sig { params(message: StringKeyHash).returns(StreamChat::StreamResponse) }
|
234
277
|
def update_message(message)
|
235
|
-
raise ArgumentError 'message must have an id' unless message.key? 'id'
|
278
|
+
raise ArgumentError, 'message must have an id' unless message.key? 'id'
|
236
279
|
|
237
280
|
post("messages/#{message['id']}", data: { message: message })
|
238
281
|
end
|
239
282
|
|
283
|
+
sig { params(message_id: String, updates: StringKeyHash, user_id: T.nilable(String), options: T.untyped).returns(StreamChat::StreamResponse) }
|
240
284
|
def update_message_partial(message_id, updates, user_id: nil, **options)
|
241
285
|
params = updates.merge(options)
|
242
286
|
params['user'] = { id: user_id } if user_id
|
243
287
|
put("messages/#{message_id}", data: params)
|
244
288
|
end
|
245
289
|
|
246
|
-
|
247
|
-
|
290
|
+
sig { params(message_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
291
|
+
def delete_message(message_id, **options)
|
292
|
+
delete("messages/#{message_id}", params: options)
|
248
293
|
end
|
249
294
|
|
295
|
+
sig { params(filter_conditions: StringKeyHash, sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
250
296
|
def query_banned_users(filter_conditions, sort: nil, **options)
|
251
297
|
params = options.merge({
|
252
298
|
filter_conditions: filter_conditions,
|
253
|
-
sort: get_sort_fields(sort)
|
299
|
+
sort: StreamChat.get_sort_fields(sort)
|
254
300
|
})
|
255
301
|
get('query_banned_users', params: { payload: params.to_json })
|
256
302
|
end
|
257
303
|
|
304
|
+
sig { params(filter_conditions: StringKeyHash, sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
258
305
|
def query_users(filter_conditions, sort: nil, **options)
|
259
306
|
params = options.merge({
|
260
307
|
filter_conditions: filter_conditions,
|
261
|
-
sort: get_sort_fields(sort)
|
308
|
+
sort: StreamChat.get_sort_fields(sort)
|
262
309
|
})
|
263
310
|
get('users', params: { payload: params.to_json })
|
264
311
|
end
|
265
312
|
|
313
|
+
sig { params(filter_conditions: StringKeyHash, sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
266
314
|
def query_channels(filter_conditions, sort: nil, **options)
|
267
315
|
data = { state: true, watch: false, presence: false }
|
268
316
|
data = data.merge(options).merge({
|
269
317
|
filter_conditions: filter_conditions,
|
270
|
-
sort: get_sort_fields(sort)
|
318
|
+
sort: StreamChat.get_sort_fields(sort)
|
271
319
|
})
|
272
320
|
post('channels', data: data)
|
273
321
|
end
|
274
322
|
|
323
|
+
sig { params(data: StringKeyHash).returns(StreamChat::StreamResponse) }
|
275
324
|
def create_channel_type(data)
|
276
325
|
data['commands'] = ['all'] unless data.key?('commands') || data['commands'].nil? || data['commands'].empty?
|
277
326
|
post('channeltypes', data: data)
|
278
327
|
end
|
279
328
|
|
329
|
+
sig { params(channel_type: String).returns(StreamChat::StreamResponse) }
|
280
330
|
def get_channel_type(channel_type)
|
281
331
|
get("channeltypes/#{channel_type}")
|
282
332
|
end
|
283
333
|
|
334
|
+
sig { returns(StreamChat::StreamResponse) }
|
284
335
|
def list_channel_types
|
285
336
|
get('channeltypes')
|
286
337
|
end
|
287
338
|
|
339
|
+
sig { params(channel_type: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
288
340
|
def update_channel_type(channel_type, **options)
|
289
341
|
put("channeltypes/#{channel_type}", data: options)
|
290
342
|
end
|
291
343
|
|
344
|
+
sig { params(channel_type: String).returns(StreamChat::StreamResponse) }
|
292
345
|
def delete_channel_type(channel_type)
|
293
346
|
delete("channeltypes/#{channel_type}")
|
294
347
|
end
|
@@ -297,14 +350,16 @@ module StreamChat
|
|
297
350
|
#
|
298
351
|
# @param [string] channel_type the channel type
|
299
352
|
# @param [string] channel_id the channel identifier
|
300
|
-
# @param [
|
353
|
+
# @param [StringKeyHash] data additional channel data
|
301
354
|
#
|
302
355
|
# @return [StreamChat::Channel]
|
303
356
|
#
|
357
|
+
sig { params(channel_type: String, channel_id: T.nilable(String), data: T.nilable(StringKeyHash)).returns(StreamChat::Channel) }
|
304
358
|
def channel(channel_type, channel_id: nil, data: nil)
|
305
359
|
StreamChat::Channel.new(self, channel_type, channel_id, data)
|
306
360
|
end
|
307
361
|
|
362
|
+
sig { params(device_id: String, push_provider: String, user_id: String).returns(StreamChat::StreamResponse) }
|
308
363
|
def add_device(device_id, push_provider, user_id)
|
309
364
|
post('devices', data: {
|
310
365
|
id: device_id,
|
@@ -313,14 +368,17 @@ module StreamChat
|
|
313
368
|
})
|
314
369
|
end
|
315
370
|
|
371
|
+
sig { params(device_id: String, user_id: String).returns(StreamChat::StreamResponse) }
|
316
372
|
def delete_device(device_id, user_id)
|
317
373
|
delete('devices', params: { id: device_id, user_id: user_id })
|
318
374
|
end
|
319
375
|
|
376
|
+
sig { params(user_id: String).returns(StreamChat::StreamResponse) }
|
320
377
|
def get_devices(user_id)
|
321
378
|
get('devices', params: { user_id: user_id })
|
322
379
|
end
|
323
380
|
|
381
|
+
sig { params(server_side: T::Boolean, android: T::Boolean, ios: T::Boolean, web: T::Boolean, endpoints: T::Array[String]).returns(StreamChat::StreamResponse) }
|
324
382
|
def get_rate_limits(server_side: false, android: false, ios: false, web: false, endpoints: [])
|
325
383
|
params = {}
|
326
384
|
params['server_side'] = server_side if server_side
|
@@ -332,78 +390,96 @@ module StreamChat
|
|
332
390
|
get('rate_limits', params: params)
|
333
391
|
end
|
334
392
|
|
393
|
+
sig { params(request_body: String, x_signature: String).returns(T::Boolean) }
|
335
394
|
def verify_webhook(request_body, x_signature)
|
336
395
|
signature = OpenSSL::HMAC.hexdigest('SHA256', @api_secret, request_body)
|
337
396
|
signature == x_signature
|
338
397
|
end
|
339
398
|
|
399
|
+
sig { params(user_id: String, event: StringKeyHash).returns(StreamChat::StreamResponse) }
|
340
400
|
def send_user_event(user_id, event)
|
341
401
|
post("users/#{user_id}/event", data: event)
|
342
402
|
end
|
343
403
|
|
404
|
+
sig { params(message_id: String, language: String).returns(StreamChat::StreamResponse) }
|
344
405
|
def translate_message(message_id, language)
|
345
406
|
post("messages/#{message_id}/translate", data: { language: language })
|
346
407
|
end
|
347
408
|
|
409
|
+
sig { params(message_id: String, data: StringKeyHash).returns(StreamChat::StreamResponse) }
|
348
410
|
def run_message_action(message_id, data)
|
349
411
|
post("messages/#{message_id}/action", data: data)
|
350
412
|
end
|
351
413
|
|
414
|
+
sig { params(user: StringKeyHash).returns(StreamChat::StreamResponse) }
|
352
415
|
def create_guest(user)
|
353
416
|
post('guests', data: user)
|
354
417
|
end
|
355
418
|
|
419
|
+
sig { returns(StreamChat::StreamResponse) }
|
356
420
|
def list_blocklists
|
357
421
|
get('blocklists')
|
358
422
|
end
|
359
423
|
|
424
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
360
425
|
def get_blocklist(name)
|
361
426
|
get("blocklists/#{name}")
|
362
427
|
end
|
363
428
|
|
429
|
+
sig { params(name: String, words: StringKeyHash).returns(StreamChat::StreamResponse) }
|
364
430
|
def create_blocklist(name, words)
|
365
431
|
post('blocklists', data: { name: name, words: words })
|
366
432
|
end
|
367
433
|
|
434
|
+
sig { params(name: String, words: StringKeyHash).returns(StreamChat::StreamResponse) }
|
368
435
|
def update_blocklist(name, words)
|
369
436
|
put("blocklists/#{name}", data: { words: words })
|
370
437
|
end
|
371
438
|
|
439
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
372
440
|
def delete_blocklist(name)
|
373
441
|
delete("blocklists/#{name}")
|
374
442
|
end
|
375
443
|
|
444
|
+
sig { params(channels: StringKeyHash, options: T.untyped).returns(StreamChat::StreamResponse) }
|
376
445
|
def export_channels(*channels, **options)
|
377
446
|
post('export_channels', data: { channels: channels, **options })
|
378
447
|
end
|
379
448
|
|
449
|
+
sig { params(task_id: String).returns(StreamChat::StreamResponse) }
|
380
450
|
def get_export_channel_status(task_id)
|
381
451
|
get("export_channels/#{task_id}")
|
382
452
|
end
|
383
453
|
|
454
|
+
sig { params(task_id: String).returns(StreamChat::StreamResponse) }
|
384
455
|
def get_task(task_id)
|
385
456
|
get("tasks/#{task_id}")
|
386
457
|
end
|
387
458
|
|
459
|
+
sig { params(user_ids: T::Array[String], user: String, messages: T.nilable(StringKeyHash), conversations: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
388
460
|
def delete_users(user_ids, user: SOFT_DELETE, messages: nil, conversations: nil)
|
389
461
|
post('users/delete', data: { user_ids: user_ids, user: user, messages: messages, conversations: conversations })
|
390
462
|
end
|
391
463
|
|
464
|
+
sig { params(cids: T::Array[String], hard_delete: T::Boolean).returns(StreamChat::StreamResponse) }
|
392
465
|
def delete_channels(cids, hard_delete: false)
|
393
466
|
post('channels/delete', data: { cids: cids, hard_delete: hard_delete })
|
394
467
|
end
|
395
468
|
|
469
|
+
sig { params(before: T.any(DateTime, String)).returns(StreamChat::StreamResponse) }
|
396
470
|
def revoke_tokens(before)
|
397
|
-
before = before.rfc3339 if before.instance_of?(DateTime)
|
471
|
+
before = T.cast(before, DateTime).rfc3339 if before.instance_of?(DateTime)
|
398
472
|
update_app_settings({ 'revoke_tokens_issued_before' => before })
|
399
473
|
end
|
400
474
|
|
475
|
+
sig { params(user_id: String, before: T.any(DateTime, String)).returns(StreamChat::StreamResponse) }
|
401
476
|
def revoke_user_token(user_id, before)
|
402
477
|
revoke_users_token([user_id], before)
|
403
478
|
end
|
404
479
|
|
480
|
+
sig { params(user_ids: T::Array[String], before: T.any(DateTime, String)).returns(StreamChat::StreamResponse) }
|
405
481
|
def revoke_users_token(user_ids, before)
|
406
|
-
before = before.rfc3339 if before.instance_of?(DateTime)
|
482
|
+
before = T.cast(before, DateTime).rfc3339 if before.instance_of?(DateTime)
|
407
483
|
|
408
484
|
updates = []
|
409
485
|
user_ids.each do |user_id|
|
@@ -417,32 +493,38 @@ module StreamChat
|
|
417
493
|
update_users_partial(updates)
|
418
494
|
end
|
419
495
|
|
496
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
420
497
|
def put(relative_url, params: nil, data: nil)
|
421
498
|
make_http_request(:put, relative_url, params: params, data: data)
|
422
499
|
end
|
423
500
|
|
501
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
424
502
|
def post(relative_url, params: nil, data: nil)
|
425
503
|
make_http_request(:post, relative_url, params: params, data: data)
|
426
504
|
end
|
427
505
|
|
506
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
428
507
|
def get(relative_url, params: nil)
|
429
508
|
make_http_request(:get, relative_url, params: params)
|
430
509
|
end
|
431
510
|
|
511
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
432
512
|
def delete(relative_url, params: nil)
|
433
513
|
make_http_request(:delete, relative_url, params: params)
|
434
514
|
end
|
435
515
|
|
516
|
+
sig { params(relative_url: String, params: T.nilable(StringKeyHash), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
436
517
|
def patch(relative_url, params: nil, data: nil)
|
437
518
|
make_http_request(:patch, relative_url, params: params, data: data)
|
438
519
|
end
|
439
520
|
|
440
|
-
|
521
|
+
sig { params(relative_url: String, file_url: String, user: StringKeyHash, content_type: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
522
|
+
def send_file(relative_url, file_url, user, content_type = nil)
|
441
523
|
url = [@base_url, relative_url].join('/')
|
442
524
|
|
443
525
|
body = { user: user.to_json }
|
444
526
|
|
445
|
-
body[:file] = Faraday::UploadIO.new(file_url, content_type)
|
527
|
+
body[:file] = Faraday::UploadIO.new(file_url, content_type || 'application/octet-stream')
|
446
528
|
|
447
529
|
response = @conn.post url do |req|
|
448
530
|
req.headers['X-Stream-Client'] = get_user_agent
|
@@ -455,76 +537,94 @@ module StreamChat
|
|
455
537
|
parse_response(response)
|
456
538
|
end
|
457
539
|
|
540
|
+
sig { params(push_data: StringKeyHash).returns(StreamChat::StreamResponse) }
|
458
541
|
def check_push(push_data)
|
459
542
|
post('check_push', data: push_data)
|
460
543
|
end
|
461
544
|
|
545
|
+
sig { params(sqs_key: T.nilable(String), sqs_secret: T.nilable(String), sqs_url: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
462
546
|
def check_sqs(sqs_key = nil, sqs_secret = nil, sqs_url = nil)
|
463
547
|
post('check_sqs', data: { sqs_key: sqs_key, sqs_secret: sqs_secret, sqs_url: sqs_url })
|
464
548
|
end
|
465
549
|
|
550
|
+
sig { params(command: StringKeyHash).returns(StreamChat::StreamResponse) }
|
466
551
|
def create_command(command)
|
467
552
|
post('commands', data: command)
|
468
553
|
end
|
469
554
|
|
555
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
470
556
|
def get_command(name)
|
471
557
|
get("commands/#{name}")
|
472
558
|
end
|
473
559
|
|
560
|
+
sig { params(name: String, command: StringKeyHash).returns(StreamChat::StreamResponse) }
|
474
561
|
def update_command(name, command)
|
475
562
|
put("commands/#{name}", data: command)
|
476
563
|
end
|
477
564
|
|
565
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
478
566
|
def delete_command(name)
|
479
567
|
delete("commands/#{name}")
|
480
568
|
end
|
481
569
|
|
570
|
+
sig { returns(StreamChat::StreamResponse) }
|
482
571
|
def list_commands
|
483
572
|
get('commands')
|
484
573
|
end
|
485
574
|
|
575
|
+
sig { returns(StreamChat::StreamResponse) }
|
486
576
|
def list_permissions
|
487
577
|
get('permissions')
|
488
578
|
end
|
489
579
|
|
580
|
+
sig { params(id: String).returns(StreamChat::StreamResponse) }
|
490
581
|
def get_permission(id)
|
491
582
|
get("permissions/#{id}")
|
492
583
|
end
|
493
584
|
|
585
|
+
sig { params(permission: StringKeyHash).returns(StreamChat::StreamResponse) }
|
494
586
|
def create_permission(permission)
|
495
587
|
post('permissions', data: permission)
|
496
588
|
end
|
497
589
|
|
590
|
+
sig { params(id: String, permission: StringKeyHash).returns(StreamChat::StreamResponse) }
|
498
591
|
def update_permission(id, permission)
|
499
592
|
put("permissions/#{id}", data: permission)
|
500
593
|
end
|
501
594
|
|
595
|
+
sig { params(id: String).returns(StreamChat::StreamResponse) }
|
502
596
|
def delete_permission(id)
|
503
597
|
delete("permissions/#{id}")
|
504
598
|
end
|
505
599
|
|
600
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
506
601
|
def create_role(name)
|
507
602
|
post('roles', data: { name: name })
|
508
603
|
end
|
509
604
|
|
605
|
+
sig { params(name: String).returns(StreamChat::StreamResponse) }
|
510
606
|
def delete_role(name)
|
511
607
|
delete("roles/#{name}")
|
512
608
|
end
|
513
609
|
|
610
|
+
sig { returns(StreamChat::StreamResponse) }
|
514
611
|
def list_roles
|
515
612
|
get('roles')
|
516
613
|
end
|
517
614
|
|
518
615
|
private
|
519
616
|
|
617
|
+
sig { returns(T::Hash[String, String]) }
|
520
618
|
def get_default_params
|
521
619
|
{ api_key: @api_key }
|
522
620
|
end
|
523
621
|
|
622
|
+
sig { returns(String) }
|
524
623
|
def get_user_agent
|
525
624
|
"stream-ruby-client-#{StreamChat::VERSION}"
|
526
625
|
end
|
527
626
|
|
627
|
+
sig { returns(T::Hash[String, String]) }
|
528
628
|
def get_default_headers
|
529
629
|
{
|
530
630
|
'Content-Type': 'application/json',
|
@@ -532,6 +632,7 @@ module StreamChat
|
|
532
632
|
}
|
533
633
|
end
|
534
634
|
|
635
|
+
sig { params(response: Faraday::Response).returns(StreamChat::StreamResponse) }
|
535
636
|
def parse_response(response)
|
536
637
|
begin
|
537
638
|
parsed_result = JSON.parse(response.body)
|
@@ -543,6 +644,7 @@ module StreamChat
|
|
543
644
|
StreamResponse.new(parsed_result, response)
|
544
645
|
end
|
545
646
|
|
647
|
+
sig { params(method: Symbol, relative_url: String, params: T.nilable(StringKeyHash), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
546
648
|
def make_http_request(method, relative_url, params: nil, data: nil)
|
547
649
|
headers = get_default_headers
|
548
650
|
headers['Authorization'] = @auth_token
|