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.
@@ -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 [hash] options extra options such as base_url
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
- @options = options
47
- @auth_token = JWT.encode({ server: true }, @api_secret, 'HS256')
48
- @base_url = options[:base_url] || DEFAULT_BASE_URL
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 [hash] options extra options
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', **settings)
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", **options)
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", **options)
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
- def delete_message(message_id)
247
- delete("messages/#{message_id}")
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 [hash] data additional channel data
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
- def send_file(relative_url, file_url, user, content_type = 'application/octet-stream')
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