getstream-ruby 8.0.2 → 10.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 +36 -0
- data/lib/getstream_ruby/client.rb +92 -31
- data/lib/getstream_ruby/configuration.rb +26 -29
- data/lib/getstream_ruby/generated/chat_client.rb +29 -0
- data/lib/getstream_ruby/generated/feed.rb +16 -4
- data/lib/getstream_ruby/generated/feeds_client.rb +160 -10
- data/lib/getstream_ruby/generated/models/activity_response.rb +10 -0
- data/lib/getstream_ruby/generated/models/add_comment_reaction_request.rb +5 -0
- data/lib/getstream_ruby/generated/models/add_comment_reaction_response.rb +18 -2
- data/lib/getstream_ruby/generated/models/add_reaction_request.rb +5 -0
- data/lib/getstream_ruby/generated/models/add_reaction_response.rb +18 -2
- data/lib/getstream_ruby/generated/models/ai_audio_config_request.rb +36 -0
- data/lib/getstream_ruby/generated/models/ai_audio_config_response.rb +41 -0
- data/lib/getstream_ruby/generated/models/async_export_error_event.rb +1 -1
- data/lib/getstream_ruby/generated/models/async_export_review_queue_event.rb +66 -0
- data/lib/getstream_ruby/generated/models/batch_query_activity_reactions_request.rb +66 -0
- data/lib/getstream_ruby/generated/models/batch_query_activity_reactions_response.rb +46 -0
- data/lib/getstream_ruby/generated/models/batch_query_comment_reactions_request.rb +66 -0
- data/lib/getstream_ruby/generated/models/batch_query_comment_reactions_response.rb +46 -0
- data/lib/getstream_ruby/generated/models/check_response.rb +5 -0
- data/lib/getstream_ruby/generated/models/closed_caption_rule_parameters.rb +5 -0
- data/lib/getstream_ruby/generated/models/comment_response.rb +5 -0
- data/lib/getstream_ruby/generated/models/config_response.rb +5 -0
- data/lib/getstream_ruby/generated/models/create_queue_request.rb +61 -0
- data/lib/getstream_ruby/generated/models/delete_queue_request.rb +36 -0
- data/lib/getstream_ruby/generated/models/feeds_share_response.rb +41 -0
- data/lib/getstream_ruby/generated/models/feeds_v3_activity_response.rb +10 -0
- data/lib/getstream_ruby/generated/models/feeds_v3_comment_response.rb +5 -0
- data/lib/getstream_ruby/generated/models/filter_config_response.rb +5 -0
- data/lib/getstream_ruby/generated/models/list_queues_response.rb +36 -0
- data/lib/getstream_ruby/generated/models/moderation_call_response.rb +126 -0
- data/lib/getstream_ruby/generated/models/moderation_dashboard_preferences.rb +10 -10
- data/lib/getstream_ruby/generated/models/moderation_payload.rb +26 -1
- data/lib/getstream_ruby/generated/models/moderation_payload_request.rb +5 -0
- data/lib/getstream_ruby/generated/models/moderation_payload_response.rb +26 -1
- data/lib/getstream_ruby/generated/models/moderation_queue_response.rb +76 -0
- data/lib/getstream_ruby/generated/models/ocr_content_parameters.rb +41 -0
- data/lib/getstream_ruby/generated/models/permission.rb +5 -0
- data/lib/getstream_ruby/generated/models/query_activity_shares_response.rb +46 -0
- data/lib/getstream_ruby/generated/models/query_moderation_rules_response.rb +1 -1
- data/lib/getstream_ruby/generated/models/queue_response.rb +36 -0
- data/lib/getstream_ruby/generated/models/review_queue_item_response.rb +1 -1
- data/lib/getstream_ruby/generated/models/rule_builder_condition.rb +5 -0
- data/lib/getstream_ruby/generated/models/share_response.rb +41 -0
- data/lib/getstream_ruby/generated/models/threaded_comment_response.rb +5 -0
- data/lib/getstream_ruby/generated/models/translate_activity_request.rb +31 -0
- data/lib/getstream_ruby/generated/models/translate_activity_response.rb +36 -0
- data/lib/getstream_ruby/generated/models/translate_comment_request.rb +31 -0
- data/lib/getstream_ruby/generated/models/translate_comment_response.rb +36 -0
- data/lib/getstream_ruby/generated/models/triggered_rule_response.rb +5 -0
- data/lib/getstream_ruby/generated/models/update_app_request.rb +10 -0
- data/lib/getstream_ruby/generated/models/update_queue_request.rb +56 -0
- data/lib/getstream_ruby/generated/models/upsert_config_request.rb +5 -0
- data/lib/getstream_ruby/generated/moderation_client.rb +91 -0
- data/lib/getstream_ruby/generated/webhook.rb +7 -0
- data/lib/getstream_ruby/log_redaction.rb +58 -0
- data/lib/getstream_ruby/request_logging.rb +97 -0
- data/lib/getstream_ruby/retry_config.rb +27 -0
- data/lib/getstream_ruby/version.rb +1 -1
- data/lib/getstream_ruby.rb +2 -0
- metadata +27 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f7c2582f037fa1be220f8b72647c0a87254d0eeb42af2b5046cdb410852f25d7
|
|
4
|
+
data.tar.gz: a880f9c77e414fe74ee4dd7d82631c927b5af8b4c8b0dca6fca5d00386ff08cf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 10ad2c2ba0fb122b5a0048136d605eba7de662c86c7cd62123b8e84ad17f96a88750e0dc416764208e42106dab904d5127f711b36aab9083d637e8684582dd26
|
|
7
|
+
data.tar.gz: b1bffe4b14da26fb2761eb596c78b3337f8bd7f4600869e1be0792b4c581bea79108990bd7ab5898c083826b66a8b68a054eda8c2e4d93c94d75a9007735af67
|
data/README.md
CHANGED
|
@@ -163,6 +163,42 @@ rescue GetStreamRuby::APIError => e
|
|
|
163
163
|
end
|
|
164
164
|
```
|
|
165
165
|
|
|
166
|
+
## Retries
|
|
167
|
+
|
|
168
|
+
Retries are opt-in via `retry_config:` and disabled by default (the client makes exactly one attempt; errors surface unchanged). When enabled, only `GET`/`HEAD` requests are retried, and only when they fail with HTTP 429 (unless the error is marked `unrecoverable`) or a transport-level error (connection reset, timeout, DNS failure, TLS handshake failure). Writes, 5xx responses, and other 4xx responses are never retried.
|
|
169
|
+
|
|
170
|
+
```ruby
|
|
171
|
+
client = GetStreamRuby::Client.new(
|
|
172
|
+
api_key: '...', api_secret: '...',
|
|
173
|
+
retry_config: GetStreamRuby::RetryConfig.new(enabled: true, max_attempts: 3, max_backoff: 30.0)
|
|
174
|
+
)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`max_attempts` caps the total number of attempts (default 3). `max_backoff` caps the wait between attempts (default 30.0 seconds). A 429 with a `Retry-After` header waits exactly that long, clamped to `max_backoff`, with no jitter. Otherwise the wait is full jitter: a random delay between 0 and `min(max_backoff, 2**attempt)` seconds.
|
|
178
|
+
|
|
179
|
+
## Logging
|
|
180
|
+
|
|
181
|
+
Pass a stdlib `Logger` via `logger:` to get structured, single-line log events. With no `logger:`, the SDK produces zero output; the SDK never sets the logger's level either, that's the caller's call.
|
|
182
|
+
|
|
183
|
+
```ruby
|
|
184
|
+
require 'logger'
|
|
185
|
+
|
|
186
|
+
client = GetStreamRuby.manual(
|
|
187
|
+
api_key: "your_api_key",
|
|
188
|
+
api_secret: "your_api_secret",
|
|
189
|
+
logger: Logger.new($stdout)
|
|
190
|
+
)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Four events are emitted:
|
|
194
|
+
|
|
195
|
+
- `client.initialized` (INFO, once at construction): SDK version and the effective client config (pool size, timeouts, gzip, whether a custom `http_client`/`log_bodies` is set).
|
|
196
|
+
- `http.request.sent` (DEBUG, before each request).
|
|
197
|
+
- `http.response.received` (DEBUG, after any response including 4xx/5xx — those are just data, not a failure).
|
|
198
|
+
- `http.request.failed` (ERROR, transport failure only: no HTTP response was received at all, e.g. connection reset, timeout, DNS failure, TLS handshake failure). When [retries](#retries) are enabled, each retried attempt also emits `http.request.failed` at DEBUG with a `retry.attempt` field (1-indexed) before its backoff sleep; a 429 retry omits `error.type` (the paired `http.response.received` already recorded the status), a transport-error retry includes it.
|
|
199
|
+
|
|
200
|
+
Query values for `api_key`/`api_secret`/`token` are always redacted to `<redacted>`, and the same keys are redacted (shallowly, top-level only) in JSON body logging. No headers are ever logged. Request/response bodies are not logged by default; pass `log_bodies: true` to opt in (values for the keys above are still redacted). Enabling it emits one WARN at construction as a reminder that your logs will now contain body content.
|
|
201
|
+
|
|
166
202
|
## Development
|
|
167
203
|
|
|
168
204
|
### Quick Start
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
require 'faraday'
|
|
4
4
|
require 'faraday/gzip'
|
|
5
|
-
require 'faraday/retry'
|
|
6
5
|
require 'faraday/multipart'
|
|
7
6
|
require 'faraday/net_http_persistent'
|
|
8
7
|
require 'logger'
|
|
@@ -20,11 +19,15 @@ require_relative 'generated/webhook'
|
|
|
20
19
|
require_relative 'generated/models/api_error'
|
|
21
20
|
require_relative 'stream_response'
|
|
22
21
|
require_relative 'error_mapping'
|
|
22
|
+
require_relative 'log_redaction'
|
|
23
|
+
require_relative 'request_logging'
|
|
23
24
|
|
|
24
25
|
module GetStreamRuby
|
|
25
26
|
|
|
26
27
|
class Client
|
|
27
28
|
|
|
29
|
+
include RequestLogging
|
|
30
|
+
|
|
28
31
|
# Backdate the JWT `iat` claim by this many seconds.
|
|
29
32
|
#
|
|
30
33
|
# JWT timestamps are whole-second (RFC 7519 NumericDate), so `Time.now.to_i`
|
|
@@ -38,20 +41,23 @@ module GetStreamRuby
|
|
|
38
41
|
attr_reader :configuration
|
|
39
42
|
|
|
40
43
|
def initialize(config = nil, api_key: nil, api_secret: nil, **options)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
#
|
|
44
|
-
if api_key || api_secret || !options.empty?
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
# Overrides win over an explicit config, matching prior behavior. Only
|
|
45
|
+
# fall back to GetStreamRuby.configuration when neither is given, so
|
|
46
|
+
# that path (currently unimplemented) isn't evaluated needlessly.
|
|
47
|
+
@configuration = if api_key || api_secret || !options.empty?
|
|
48
|
+
Configuration.with_overrides(
|
|
49
|
+
api_key: api_key,
|
|
50
|
+
api_secret: api_secret,
|
|
51
|
+
**options,
|
|
52
|
+
)
|
|
53
|
+
else
|
|
54
|
+
config || GetStreamRuby.configuration
|
|
55
|
+
end
|
|
51
56
|
|
|
52
57
|
@configuration.validate!
|
|
53
58
|
@connection = build_connection
|
|
54
59
|
@configuration.log_pool_config_to(@configuration.logger)
|
|
60
|
+
warn_log_bodies_enabled
|
|
55
61
|
end
|
|
56
62
|
|
|
57
63
|
def feed_resource
|
|
@@ -209,21 +215,76 @@ module GetStreamRuby
|
|
|
209
215
|
# Check if this is a file upload request that needs multipart
|
|
210
216
|
return make_multipart_request(method, path, query_params, data) if multipart_request?(data)
|
|
211
217
|
|
|
212
|
-
|
|
218
|
+
body_json = data.to_json
|
|
219
|
+
attempt = 0
|
|
213
220
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
+
begin
|
|
222
|
+
started = monotonic_now
|
|
223
|
+
log_request_sent(method, path, query_params, body_json)
|
|
224
|
+
|
|
225
|
+
response = @connection.send(method) do |req|
|
|
226
|
+
|
|
227
|
+
req.url path, query_params
|
|
228
|
+
req.headers['Authorization'] = generate_auth_header
|
|
229
|
+
req.headers['Content-Type'] = 'application/json'
|
|
230
|
+
req.headers['stream-auth-type'] = 'jwt'
|
|
231
|
+
req.headers['X-Stream-Client'] = user_agent
|
|
232
|
+
req.body = body_json
|
|
233
|
+
req.options.timeout = request_timeout if request_timeout
|
|
234
|
+
|
|
235
|
+
end
|
|
221
236
|
|
|
237
|
+
log_response_received(response, started)
|
|
238
|
+
handle_response(response)
|
|
239
|
+
rescue Faraday::Error => e
|
|
240
|
+
error = TransportError.new("Request failed: #{e.message}", error_type: ErrorMapping.classify_faraday_error(e))
|
|
241
|
+
if retry_eligible?(method, error, attempt)
|
|
242
|
+
wait_before_retry(method, path, error, attempt, started)
|
|
243
|
+
attempt += 1
|
|
244
|
+
retry
|
|
245
|
+
end
|
|
246
|
+
log_request_failed(method, path, e, started)
|
|
247
|
+
raise error
|
|
248
|
+
rescue RateLimitError => e
|
|
249
|
+
if retry_eligible?(method, e, attempt)
|
|
250
|
+
wait_before_retry(method, path, e, attempt, started)
|
|
251
|
+
attempt += 1
|
|
252
|
+
retry
|
|
253
|
+
end
|
|
254
|
+
raise
|
|
222
255
|
end
|
|
256
|
+
end
|
|
223
257
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
258
|
+
# True when the opt-in retry policy (GetStreamRuby::RetryConfig) allows
|
|
259
|
+
# another attempt for this failure: disabled by default (single attempt,
|
|
260
|
+
# errors surface unchanged); enabled only retries idempotent GET/HEAD
|
|
261
|
+
# requests that failed with a recoverable RateLimitError or a
|
|
262
|
+
# TransportError, and only while attempts remain.
|
|
263
|
+
def retry_eligible?(method, error, attempt)
|
|
264
|
+
config = @configuration.retry_config
|
|
265
|
+
return false unless config&.enabled?
|
|
266
|
+
return false unless %i[get head].include?(method)
|
|
267
|
+
return false if error.is_a?(RateLimitError) && error.unrecoverable
|
|
268
|
+
return false unless attempt + 1 < config.max_attempts
|
|
269
|
+
|
|
270
|
+
true
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
# Emits the retry-attempt log, then blocks for the backoff delay:
|
|
274
|
+
# RateLimitError#retry_after (if positive) capped at max_backoff, no
|
|
275
|
+
# jitter; otherwise full jitter over 2**attempt capped at max_backoff.
|
|
276
|
+
# `sleep` is called on self so specs can stub it.
|
|
277
|
+
def wait_before_retry(method, path, error, attempt, started)
|
|
278
|
+
log_retry_attempt(method, path, error, attempt, started)
|
|
279
|
+
config = @configuration.retry_config
|
|
280
|
+
delay =
|
|
281
|
+
if error.is_a?(RateLimitError) && error.retry_after&.positive?
|
|
282
|
+
[error.retry_after, config.max_backoff].min
|
|
283
|
+
else
|
|
284
|
+
ceiling = [config.max_backoff, 2.0**attempt].min
|
|
285
|
+
ceiling <= 0 ? 0.0 : rand * ceiling
|
|
286
|
+
end
|
|
287
|
+
sleep(delay)
|
|
227
288
|
end
|
|
228
289
|
|
|
229
290
|
def build_connection
|
|
@@ -234,13 +295,10 @@ module GetStreamRuby
|
|
|
234
295
|
Faraday.new(url: @configuration.base_url) do |conn|
|
|
235
296
|
|
|
236
297
|
conn.request :multipart
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
backoff_factor: 2,
|
|
242
|
-
}
|
|
243
|
-
conn.response :json, content_type: /\bjson$/
|
|
298
|
+
# preserve_raw: true keeps the wire string in env[:raw_body] alongside
|
|
299
|
+
# the parsed body, so response logging can report size/content
|
|
300
|
+
# without re-serializing an already-parsed Hash.
|
|
301
|
+
conn.response :json, content_type: /\bjson$/, preserve_raw: true
|
|
244
302
|
# :gzip must come after :json (Faraday runs response middleware in reverse).
|
|
245
303
|
conn.request :gzip
|
|
246
304
|
configure_adapter(conn)
|
|
@@ -277,8 +335,6 @@ module GetStreamRuby
|
|
|
277
335
|
# A fallback silently disables pooling, so always WARN (never swallow).
|
|
278
336
|
@configuration.warn_pool_fallback(Faraday.default_adapter, e)
|
|
279
337
|
connection.adapter Faraday.default_adapter
|
|
280
|
-
# Record the adapter actually built so the INFO log reports it accurately.
|
|
281
|
-
@configuration.effective_adapter = Faraday.default_adapter.to_s
|
|
282
338
|
end
|
|
283
339
|
|
|
284
340
|
def generate_auth_header
|
|
@@ -346,6 +402,9 @@ module GetStreamRuby
|
|
|
346
402
|
payload[:upload_sizes] = upload_sizes_json
|
|
347
403
|
end
|
|
348
404
|
|
|
405
|
+
started = monotonic_now
|
|
406
|
+
log_request_sent(method, path, query_params)
|
|
407
|
+
|
|
349
408
|
response = @connection.send(method) do |req|
|
|
350
409
|
|
|
351
410
|
req.url path, query_params
|
|
@@ -356,8 +415,10 @@ module GetStreamRuby
|
|
|
356
415
|
|
|
357
416
|
end
|
|
358
417
|
|
|
418
|
+
log_response_received(response, started)
|
|
359
419
|
handle_response(response)
|
|
360
420
|
rescue Faraday::Error => e
|
|
421
|
+
log_request_failed(method, path, e, started)
|
|
361
422
|
raise TransportError.new("Request failed: #{e.message}", error_type: ErrorMapping.classify_faraday_error(e))
|
|
362
423
|
end
|
|
363
424
|
|
|
@@ -8,7 +8,7 @@ module GetStreamRuby
|
|
|
8
8
|
|
|
9
9
|
attr_accessor :api_key, :api_secret, :base_url, :timeout, :logger, :faraday_adapter, :faraday_adapter_options,
|
|
10
10
|
:connection_keep_alive, :max_conns_per_host, :idle_timeout, :connect_timeout,
|
|
11
|
-
:request_timeout, :http_client, :
|
|
11
|
+
:request_timeout, :http_client, :log_bodies, :retry_config
|
|
12
12
|
|
|
13
13
|
def initialize(api_key: nil, api_secret: nil, use_env: true, **options)
|
|
14
14
|
http_options = options[:http_options] || {}
|
|
@@ -22,6 +22,8 @@ module GetStreamRuby
|
|
|
22
22
|
@timeout = @request_timeout
|
|
23
23
|
@http_client = options[:http_client]
|
|
24
24
|
@logger = options[:logger]
|
|
25
|
+
@log_bodies = options[:log_bodies] || false
|
|
26
|
+
@retry_config = options[:retry_config] || RetryConfig.new
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
def valid?
|
|
@@ -48,41 +50,36 @@ module GetStreamRuby
|
|
|
48
50
|
faraday_adapter_options: @faraday_adapter_options.dup,
|
|
49
51
|
connection_keep_alive: @connection_keep_alive,
|
|
50
52
|
logger: @logger,
|
|
53
|
+
log_bodies: @log_bodies,
|
|
54
|
+
retry_config: @retry_config,
|
|
51
55
|
)
|
|
52
56
|
end
|
|
53
57
|
|
|
54
|
-
# Emit
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
#
|
|
58
|
-
# to the default adapter is never misreported as the requested adapter.
|
|
58
|
+
# Emit the `client.initialized` INFO event once at construction (structured
|
|
59
|
+
# logging spec §6.1). A no-op when no logger is configured: unlike
|
|
60
|
+
# `warn_pool_fallback` below, a quiet start-up here is expected, not a
|
|
61
|
+
# silently-swallowed problem, so there is no $stdout fallback.
|
|
59
62
|
def log_pool_config_to(logger)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
logger.info(
|
|
74
|
-
format(
|
|
75
|
-
fmt,
|
|
76
|
-
m: @max_conns_per_host, i: @idle_timeout, c: @connect_timeout,
|
|
77
|
-
r: @request_timeout, flag: flag, a: adapter_label
|
|
78
|
-
),
|
|
79
|
-
)
|
|
63
|
+
return if logger.nil?
|
|
64
|
+
|
|
65
|
+
fields = {
|
|
66
|
+
'stream.sdk.name' => 'getstream-ruby',
|
|
67
|
+
'stream.sdk.version' => VERSION,
|
|
68
|
+
'stream.client.max_conns_per_host' => @max_conns_per_host,
|
|
69
|
+
'stream.client.idle_timeout_seconds' => @idle_timeout,
|
|
70
|
+
'stream.client.connect_timeout_seconds' => @connect_timeout,
|
|
71
|
+
'stream.client.request_timeout_seconds' => @request_timeout,
|
|
72
|
+
'stream.client.gzip_enabled' => true,
|
|
73
|
+
'stream.client.user_http_client' => !@http_client.nil?,
|
|
74
|
+
'stream.client.log_bodies' => @log_bodies,
|
|
75
|
+
}
|
|
76
|
+
logger.info { "client.initialized #{fields.map { |k, v| "#{k}=#{v}" }.join(' ')}" }
|
|
80
77
|
end
|
|
81
78
|
|
|
82
79
|
# Emit a WARNING that the requested adapter could not be built and pooling
|
|
83
|
-
# is disabled (CHA-2956). A fallback must never be silent, so
|
|
84
|
-
#
|
|
85
|
-
#
|
|
80
|
+
# is disabled (CHA-2956). A fallback must never be silent, so unlike the
|
|
81
|
+
# structured-logging events below, this uses a default $stdout logger when
|
|
82
|
+
# none is configured.
|
|
86
83
|
def warn_pool_fallback(fallback_adapter, error)
|
|
87
84
|
warn_logger = @logger || Logger.new($stdout).tap { |l| l.level = Logger::WARN }
|
|
88
85
|
warn_logger.warn(
|
|
@@ -297,6 +297,35 @@ module GetStream
|
|
|
297
297
|
)
|
|
298
298
|
end
|
|
299
299
|
|
|
300
|
+
# Returns a channel by its CID without creating it. Responds with 404 when the channel does not exist, so it doubles as an existence check. Pass state=true to also load messages, read state and watchers.
|
|
301
|
+
#
|
|
302
|
+
# @param _type [String]
|
|
303
|
+
# @param _id [String]
|
|
304
|
+
# @param state [Boolean]
|
|
305
|
+
# @param messages_limit [Integer]
|
|
306
|
+
# @param members_limit [Integer]
|
|
307
|
+
# @param watchers_limit [Integer]
|
|
308
|
+
# @return [Models::ChannelStateResponse]
|
|
309
|
+
def get_channel(_type, _id, state = nil, messages_limit = nil, members_limit = nil, watchers_limit = nil)
|
|
310
|
+
path = '/api/v2/chat/channels/{type}/{id}'
|
|
311
|
+
# Replace path parameters
|
|
312
|
+
path = path.gsub('{type}', _type.to_s)
|
|
313
|
+
path = path.gsub('{id}', _id.to_s)
|
|
314
|
+
# Build query parameters
|
|
315
|
+
query_params = {}
|
|
316
|
+
query_params['state'] = state unless state.nil?
|
|
317
|
+
query_params['messages_limit'] = messages_limit unless messages_limit.nil?
|
|
318
|
+
query_params['members_limit'] = members_limit unless members_limit.nil?
|
|
319
|
+
query_params['watchers_limit'] = watchers_limit unless watchers_limit.nil?
|
|
320
|
+
|
|
321
|
+
# Make the API request
|
|
322
|
+
@client.make_request(
|
|
323
|
+
:get,
|
|
324
|
+
path,
|
|
325
|
+
query_params: query_params
|
|
326
|
+
)
|
|
327
|
+
end
|
|
328
|
+
|
|
300
329
|
# Updates certain fields of the channelSends events:- channel.updated
|
|
301
330
|
#
|
|
302
331
|
# @param _type [String]
|
|
@@ -32,11 +32,17 @@ module GetStream
|
|
|
32
32
|
# Create a single feed for a given feed group
|
|
33
33
|
#
|
|
34
34
|
# @param get_or_create_feed_request [GetOrCreateFeedRequest]
|
|
35
|
+
# @param language [String]
|
|
36
|
+
# @param translate_text [Boolean]
|
|
35
37
|
# @return [Models::GetOrCreateFeedResponse]
|
|
36
|
-
def get_or_create_feed(get_or_create_feed_request)
|
|
38
|
+
def get_or_create_feed(get_or_create_feed_request, language = nil, translate_text = nil)
|
|
39
|
+
# Build query parameters
|
|
40
|
+
query_params = {}
|
|
41
|
+
query_params['language'] = language unless language.nil?
|
|
42
|
+
query_params['translate_text'] = translate_text unless translate_text.nil?
|
|
37
43
|
|
|
38
44
|
# Delegate to the FeedsClient
|
|
39
|
-
@client.feeds.get_or_create_feed(@feed_group_id, @feed_id, get_or_create_feed_request)
|
|
45
|
+
@client.feeds.get_or_create_feed(@feed_group_id, @feed_id, get_or_create_feed_request, query_params)
|
|
40
46
|
end
|
|
41
47
|
|
|
42
48
|
# Update an existing feed
|
|
@@ -139,11 +145,17 @@ module GetStream
|
|
|
139
145
|
# Query pinned activities for a feed with filter query
|
|
140
146
|
#
|
|
141
147
|
# @param query_pinned_activities_request [QueryPinnedActivitiesRequest]
|
|
148
|
+
# @param language [String]
|
|
149
|
+
# @param translate_text [Boolean]
|
|
142
150
|
# @return [Models::QueryPinnedActivitiesResponse]
|
|
143
|
-
def query_pinned_activities(query_pinned_activities_request)
|
|
151
|
+
def query_pinned_activities(query_pinned_activities_request, language = nil, translate_text = nil)
|
|
152
|
+
# Build query parameters
|
|
153
|
+
query_params = {}
|
|
154
|
+
query_params['language'] = language unless language.nil?
|
|
155
|
+
query_params['translate_text'] = translate_text unless translate_text.nil?
|
|
144
156
|
|
|
145
157
|
# Delegate to the FeedsClient
|
|
146
|
-
@client.feeds.query_pinned_activities(@feed_group_id, @feed_id, query_pinned_activities_request)
|
|
158
|
+
@client.feeds.query_pinned_activities(@feed_group_id, @feed_id, query_pinned_activities_request, query_params)
|
|
147
159
|
end
|
|
148
160
|
|
|
149
161
|
end
|