Skip to content

Conversation

@rafaelmf3
Copy link
Contributor

@rafaelmf3 rafaelmf3 commented Nov 7, 2025

Summary by CodeRabbit

  • New Features
    • Enhanced channel management: history hiding and add/remove filter tag support; expanded member/invite role handling.
    • Delivery events toggle for channel types.
    • Video: ring call action and SIP inbound routing + SIP trunk management.
    • Moderation: new block, delete-comment and shadow-block actions.
    • Unread counts: optional per-user filtering.

@coderabbitai
Copy link

coderabbitai bot commented Nov 7, 2025

Walkthrough

The PR adds new channel update fields (history cutoff and filter tags), standardizes member payloads to ChannelMemberRequest, expands moderation submit_action with block/delete_comment/shadow_block, adds video SIP routing and trunk endpoints plus ring_call, and introduces delivery_events flags in many model classes.

Changes

Cohort / File(s) Summary
Chat API — Async Channels
getstream/chat/async_channel.py
Added hide_history_before, add_filter_tags, remove_filter_tags parameters to Channel.update(). Changed add_members, assign_roles, invites to ChannelMemberRequest. Propagated new fields to client.update_channel.
Chat API — Sync Channels
getstream/chat/channel.py
Mirrored async changes: Channel.update() now accepts hide_history_before, add_filter_tags, remove_filter_tags, and uses ChannelMemberRequest for member-related params; forwards them to the REST client.
Chat API — Async REST Client
getstream/chat/async_rest_client.py
update_channel() accepts hide_history_before, add_filter_tags, remove_filter_tags, and uses ChannelMemberRequest for member lists; create_channel_type() and update_channel_type() accept delivery_events; unread_counts() accepts optional user_id and uses query params.
Chat API — Sync REST Client
getstream/chat/rest_client.py
Same signature and payload updates as async REST client: channel update params, delivery_events on channel-type methods, and unread_counts(user_id).
Moderation API — Async & Sync
getstream/moderation/async_rest_client.py, getstream/moderation/rest_client.py
submit_action() signatures extended with optional block, delete_comment, and shadow_block parameters; included in request body construction.
Video API — Async & Sync
getstream/video/async_rest_client.py, getstream/video/rest_client.py
Added ring_call and SIP inbound routing/trunk management endpoints (resolve_sip_inbound, list/create/delete/update_sip_inbound_routing_rule, list/create/delete/update_sip_trunk). query_aggregate_call_stats() accepts _from. Note: duplicate insertions of some SIP trunk methods appear in diffs.
Video Call Classes
getstream/video/async_call.py, getstream/video/call.py
Added ring() method on Call (async and sync) that calls the new ring_call endpoint and syncs response state.
Models
getstream/models/__init__.py
Added optional delivery_events: Optional[bool] across many dataclasses (channel config/type request/response and related update request/response classes).

Sequence Diagram(s)

sequenceDiagram
    participant App
    participant Channel
    participant ChatRestClient
    participant API

    App->>Channel: Channel.update(hide_history_before, add_filter_tags, remove_filter_tags, add_members=ChannelMemberRequest, ...)
    Channel->>ChatRestClient: update_channel(type, id, hide_history_before, add_filter_tags, remove_filter_tags, add_members, ...)
    ChatRestClient->>ChatRestClient: build_body_dict(..., hide_history_before, add_filter_tags, remove_filter_tags, ...)
    ChatRestClient->>API: POST /channels/{type}/{id} with payload
    API-->>ChatRestClient: UpdateChannelResponse
    ChatRestClient-->>Channel: StreamResponse
    Channel-->>App: StreamResponse
Loading
sequenceDiagram
    participant App
    participant VideoRestClient
    participant API

    App->>VideoRestClient: create_sip_inbound_routing_rule(name, trunk_ids, caller_configs, ...)
    VideoRestClient->>VideoRestClient: build_body_dict(...)
    VideoRestClient->>API: POST /api/v2/video/sip/routing_rules
    API-->>VideoRestClient: SIPInboundRoutingRuleResponse
    VideoRestClient-->>App: StreamResponse

    App->>VideoRestClient: ring_call(type, id, video?, members_ids?)
    VideoRestClient->>API: POST /api/v2/video/call/{type}/{id}/ring
    API-->>VideoRestClient: RingCallResponse
    VideoRestClient-->>App: StreamResponse
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Areas needing extra attention:
    • Verify async/sync parity across chat, moderation, and video modules.
    • Inspect duplicated SIP trunk method insertions in video clients (likely merge artifact).
    • Confirm member-type migration to ChannelMemberRequest doesn't break existing call sites or serialization.
    • Spot-check many autogenerated model additions (delivery_events) for consistent placement and typing.
    • Validate unread_counts(user_id) query param handling and backward compatibility.

Poem

🐇 I hop through code with twitching nose,

Tags and history where the wild wind blows,
SIP trunks hum and ring the bell,
Moderation shapes the tales we tell,
Delivery flags flutter — change in rows.

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Title check ⚠️ Warning The PR title mentions only unread counts API spec fix, but the changeset includes extensive modifications across chat channels, moderation, video SIP routing, and filter tags—far beyond the stated scope. Update the PR title to accurately reflect all major changes, such as: 'Add chat channel filter tags, SIP routing, moderation actions, and unread counts user_id parameter' or split into multiple focused PRs.
Docstring Coverage ⚠️ Warning Docstring coverage is 1.96% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix-unread-counts-api-spec

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between f94b922 and 44978c6.

📒 Files selected for processing (6)
  • getstream/models/__init__.py (88 hunks)
  • getstream/video/async_call.py (1 hunks)
  • getstream/video/async_rest_client.py (2 hunks)
  • getstream/video/call.py (1 hunks)
  • getstream/video/rest_client.py (2 hunks)
  • getstream/video/rtc/audio_track.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (6)
getstream/models/__init__.py (2)
getstream/utils/__init__.py (2)
  • encode_datetime (39-51)
  • datetime_from_unix_ns (54-91)
getstream/feeds/rest_client.py (3)
  • activity_feedback (189-218)
  • delete_activity (330-343)
  • delete_comment (563-576)
getstream/video/rtc/audio_track.py (1)
getstream/video/rtc/track_util.py (1)
  • duration_ms (267-269)
getstream/video/async_call.py (6)
getstream/common/telemetry.py (1)
  • attach_call_cid_async (249-261)
getstream/video/call.py (1)
  • ring (275-282)
getstream/stream_response.py (2)
  • StreamResponse (11-36)
  • data (22-24)
getstream/models/__init__.py (1)
  • RingCallResponse (15736-15738)
getstream/video/async_rest_client.py (1)
  • ring_call (501-518)
getstream/video/rest_client.py (1)
  • ring_call (497-514)
getstream/video/async_rest_client.py (6)
getstream/common/telemetry.py (1)
  • operation_name (429-441)
getstream/video/rest_client.py (10)
  • ring_call (497-514)
  • resolve_sip_inbound (1046-1061)
  • list_sip_inbound_routing_rule (1064-1069)
  • create_sip_inbound_routing_rule (1072-1097)
  • delete_sip_inbound_routing_rule (1100-1110)
  • update_sip_inbound_routing_rule (1113-1145)
  • list_sip_trunks (1148-1149)
  • create_sip_trunk (1152-1156)
  • delete_sip_trunk (1159-1167)
  • update_sip_trunk (1170-1182)
getstream/stream_response.py (1)
  • StreamResponse (11-36)
getstream/models/__init__.py (16)
  • RingCallResponse (15736-15738)
  • SIPChallenge (15950-15992)
  • ResolveSipInboundResponse (15527-15537)
  • ListSIPInboundRoutingRuleResponse (10502-10506)
  • SIPCallerConfigsRequest (15934-15938)
  • SIPCallConfigsRequest (15920-15923)
  • SIPDirectRoutingRuleCallConfigsRequest (15996-15998)
  • SIPPinProtectionConfigsRequest (16118-16130)
  • SIPInboundRoutingRulePinConfigsRequest (16008-16023)
  • SIPInboundRoutingRuleResponse (16073-16114)
  • DeleteSIPInboundRoutingRuleResponse (7064-7065)
  • UpdateSIPInboundRoutingRuleResponse (19097-19101)
  • ListSIPTrunksResponse (10510-10514)
  • CreateSIPTrunkResponse (6633-6637)
  • DeleteSIPTrunkResponse (7069-7070)
  • UpdateSIPTrunkResponse (19111-19115)
getstream/utils/__init__.py (1)
  • build_body_dict (151-175)
getstream/base.py (8)
  • post (240-256)
  • post (429-445)
  • get (222-238)
  • get (411-427)
  • delete (276-292)
  • delete (465-481)
  • put (258-274)
  • put (447-463)
getstream/video/rest_client.py (5)
getstream/common/telemetry.py (1)
  • operation_name (429-441)
getstream/video/async_rest_client.py (10)
  • ring_call (501-518)
  • resolve_sip_inbound (1052-1067)
  • list_sip_inbound_routing_rule (1070-1075)
  • create_sip_inbound_routing_rule (1078-1103)
  • delete_sip_inbound_routing_rule (1106-1116)
  • update_sip_inbound_routing_rule (1119-1151)
  • list_sip_trunks (1154-1155)
  • create_sip_trunk (1158-1164)
  • delete_sip_trunk (1167-1175)
  • update_sip_trunk (1178-1190)
getstream/models/__init__.py (16)
  • RingCallResponse (15736-15738)
  • SIPChallenge (15950-15992)
  • ResolveSipInboundResponse (15527-15537)
  • ListSIPInboundRoutingRuleResponse (10502-10506)
  • SIPCallerConfigsRequest (15934-15938)
  • SIPCallConfigsRequest (15920-15923)
  • SIPDirectRoutingRuleCallConfigsRequest (15996-15998)
  • SIPPinProtectionConfigsRequest (16118-16130)
  • SIPInboundRoutingRulePinConfigsRequest (16008-16023)
  • SIPInboundRoutingRuleResponse (16073-16114)
  • DeleteSIPInboundRoutingRuleResponse (7064-7065)
  • UpdateSIPInboundRoutingRuleResponse (19097-19101)
  • ListSIPTrunksResponse (10510-10514)
  • CreateSIPTrunkResponse (6633-6637)
  • DeleteSIPTrunkResponse (7069-7070)
  • UpdateSIPTrunkResponse (19111-19115)
getstream/utils/__init__.py (1)
  • build_body_dict (151-175)
getstream/base.py (8)
  • post (240-256)
  • post (429-445)
  • get (222-238)
  • get (411-427)
  • delete (276-292)
  • delete (465-481)
  • put (258-274)
  • put (447-463)
getstream/video/call.py (7)
getstream/common/telemetry.py (1)
  • attach_call_cid (235-246)
getstream/video/async_call.py (1)
  • ring (281-288)
getstream/stream_response.py (2)
  • StreamResponse (11-36)
  • data (22-24)
getstream/models/__init__.py (1)
  • RingCallResponse (15736-15738)
getstream/video/async_rest_client.py (1)
  • ring_call (501-518)
getstream/video/rest_client.py (1)
  • ring_call (497-514)
getstream/video/__init__.py (1)
  • _sync_from_response (33-36)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Tests (3.10)
  • GitHub Check: Tests (3.12)
  • GitHub Check: Tests (3.11)
  • GitHub Check: Tests (3.13)
🔇 Additional comments (7)
getstream/video/rtc/audio_track.py (1)

93-96: LGTM! Formatting improvement enhances readability.

The multi-line formatting of the logger.warning call is consistent with other logging statements in this file and improves code readability without any semantic changes.

getstream/video/rest_client.py (2)

496-514: LGTM! Ring call endpoint properly implemented.

The ring_call method correctly constructs the request with path parameters and optional body fields, following the established patterns in this codebase.


1045-1182: LGTM! SIP routing and trunk management endpoints correctly implemented.

All SIP-related methods follow RESTful conventions with appropriate HTTP verbs, proper parameter handling, and consistent patterns. The implementations match their async counterparts.

getstream/video/call.py (1)

274-282: LGTM! Ring method properly integrated.

The ring method follows the established pattern for Call class methods, with proper telemetry decoration, state synchronization, and delegation to the underlying client.

getstream/video/async_call.py (1)

280-288: LGTM! Async ring method properly implemented.

The async ring method correctly mirrors its synchronous counterpart with appropriate async/await usage and proper integration with the async telemetry system.

getstream/video/async_rest_client.py (1)

500-1190: LGTM! All async REST client methods properly implemented.

All new async methods (ring_call and SIP-related endpoints) correctly mirror their synchronous counterparts with appropriate async/await usage. The implementations follow established patterns and maintain consistency across the codebase.

getstream/models/__init__.py (1)

373-20514: LGTM! Well-structured auto-generated model updates.

The changes across all 88 hunks are consistent and follow established patterns:

  • All datetime fields properly configured with encode_datetime, datetime_from_unix_ns, and marshmallow field metadata
  • New dataclasses correctly inherit from DataClassJsonMixin
  • Type annotations are consistent and appropriate (Optional fields, Lists, forward-referenced types)
  • Standardization of member payloads to ChannelMemberRequest/ChannelMemberResponse improves type safety
  • New functionality additions (SIP routing/trunks, ring calls, delivery events, filter tags, metrics, feeds usage stats) are properly structured

The auto-generated code quality is high, with no missing serialization metadata or type inconsistencies detected.

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • CHA-0: Entity not found: Issue - Could not find referenced Issue.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between b9966c3 and f94b922.

📒 Files selected for processing (9)
  • getstream/chat/async_channel.py (2 hunks)
  • getstream/chat/async_rest_client.py (7 hunks)
  • getstream/chat/channel.py (2 hunks)
  • getstream/chat/rest_client.py (7 hunks)
  • getstream/models/__init__.py (85 hunks)
  • getstream/moderation/async_rest_client.py (2 hunks)
  • getstream/moderation/rest_client.py (2 hunks)
  • getstream/video/async_rest_client.py (1 hunks)
  • getstream/video/rest_client.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (9)
getstream/moderation/async_rest_client.py (1)
getstream/models/__init__.py (3)
  • BlockActionRequest (2022-2025)
  • DeleteCommentRequest (6943-6949)
  • ShadowBlockActionRequest (16610-16613)
getstream/moderation/rest_client.py (1)
getstream/models/__init__.py (3)
  • BlockActionRequest (2022-2025)
  • DeleteCommentRequest (6943-6949)
  • ShadowBlockActionRequest (16610-16613)
getstream/chat/async_rest_client.py (5)
getstream/models/__init__.py (2)
  • ChannelMemberRequest (4797-4807)
  • WrappedUnreadCountsResponse (20491-20510)
getstream/chat/rest_client.py (1)
  • unread_counts (1568-1576)
getstream/stream_response.py (1)
  • StreamResponse (11-36)
getstream/utils/__init__.py (1)
  • build_query_param (94-126)
getstream/base.py (2)
  • get (221-237)
  • get (400-416)
getstream/models/__init__.py (2)
getstream/utils/__init__.py (2)
  • encode_datetime (39-51)
  • datetime_from_unix_ns (54-91)
getstream/feeds/rest_client.py (1)
  • activity_feedback (189-218)
getstream/chat/channel.py (1)
getstream/models/__init__.py (1)
  • ChannelMemberRequest (4797-4807)
getstream/chat/async_channel.py (1)
getstream/models/__init__.py (1)
  • ChannelMemberRequest (4797-4807)
getstream/chat/rest_client.py (5)
getstream/models/__init__.py (2)
  • ChannelMemberRequest (4797-4807)
  • WrappedUnreadCountsResponse (20491-20510)
getstream/chat/async_rest_client.py (1)
  • unread_counts (1578-1586)
getstream/stream_response.py (1)
  • StreamResponse (11-36)
getstream/utils/__init__.py (1)
  • build_query_param (94-126)
getstream/base.py (2)
  • get (221-237)
  • get (400-416)
getstream/video/rest_client.py (6)
getstream/common/telemetry.py (1)
  • operation_name (429-441)
getstream/video/async_rest_client.py (9)
  • resolve_sip_inbound (1032-1047)
  • list_sip_inbound_routing_rule (1050-1055)
  • create_sip_inbound_routing_rule (1058-1083)
  • delete_sip_inbound_routing_rule (1086-1096)
  • update_sip_inbound_routing_rule (1099-1131)
  • list_sip_trunks (1134-1135)
  • create_sip_trunk (1138-1144)
  • delete_sip_trunk (1147-1155)
  • update_sip_trunk (1158-1170)
getstream/models/__init__.py (15)
  • SIPChallenge (15924-15966)
  • ResolveSipInboundResponse (15517-15527)
  • ListSIPInboundRoutingRuleResponse (10492-10496)
  • SIPCallerConfigsRequest (15908-15912)
  • SIPCallConfigsRequest (15894-15897)
  • SIPDirectRoutingRuleCallConfigsRequest (15970-15972)
  • SIPPinProtectionConfigsRequest (16078-16090)
  • SIPInboundRoutingRulePinConfigsRequest (15982-15997)
  • SIPInboundRoutingRuleResponse (16047-16074)
  • DeleteSIPInboundRoutingRuleResponse (7054-7055)
  • UpdateSIPInboundRoutingRuleResponse (19044-19048)
  • ListSIPTrunksResponse (10500-10504)
  • CreateSIPTrunkResponse (6623-6627)
  • DeleteSIPTrunkResponse (7059-7060)
  • UpdateSIPTrunkResponse (19058-19062)
getstream/stream_response.py (1)
  • StreamResponse (11-36)
getstream/utils/__init__.py (1)
  • build_body_dict (129-153)
getstream/base.py (8)
  • post (239-255)
  • post (418-434)
  • get (221-237)
  • get (400-416)
  • delete (275-291)
  • delete (454-470)
  • put (257-273)
  • put (436-452)
getstream/video/async_rest_client.py (5)
getstream/common/telemetry.py (1)
  • operation_name (429-441)
getstream/video/rest_client.py (9)
  • resolve_sip_inbound (1026-1041)
  • list_sip_inbound_routing_rule (1044-1049)
  • create_sip_inbound_routing_rule (1052-1077)
  • delete_sip_inbound_routing_rule (1080-1090)
  • update_sip_inbound_routing_rule (1093-1125)
  • list_sip_trunks (1128-1129)
  • create_sip_trunk (1132-1136)
  • delete_sip_trunk (1139-1147)
  • update_sip_trunk (1150-1162)
getstream/models/__init__.py (15)
  • SIPChallenge (15924-15966)
  • ResolveSipInboundResponse (15517-15527)
  • ListSIPInboundRoutingRuleResponse (10492-10496)
  • SIPCallerConfigsRequest (15908-15912)
  • SIPCallConfigsRequest (15894-15897)
  • SIPDirectRoutingRuleCallConfigsRequest (15970-15972)
  • SIPPinProtectionConfigsRequest (16078-16090)
  • SIPInboundRoutingRulePinConfigsRequest (15982-15997)
  • SIPInboundRoutingRuleResponse (16047-16074)
  • DeleteSIPInboundRoutingRuleResponse (7054-7055)
  • UpdateSIPInboundRoutingRuleResponse (19044-19048)
  • ListSIPTrunksResponse (10500-10504)
  • CreateSIPTrunkResponse (6623-6627)
  • DeleteSIPTrunkResponse (7059-7060)
  • UpdateSIPTrunkResponse (19058-19062)
getstream/utils/__init__.py (1)
  • build_body_dict (129-153)
getstream/base.py (8)
  • post (239-255)
  • post (418-434)
  • get (221-237)
  • get (400-416)
  • delete (275-291)
  • delete (454-470)
  • put (257-273)
  • put (436-452)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Tests (3.13)
  • GitHub Check: Tests (3.12)
  • GitHub Check: Tests (3.10)
  • GitHub Check: Tests (3.11)
🔇 Additional comments (12)
getstream/models/__init__.py (8)

16047-16116: Verify SIP classes match API specification for created_at/updated_at timestamp format.

Lines 16055–16056 and 16115 use the UnixTs placeholder for timestamp fields. Confirm with API spec whether these are Unix timestamps (seconds/nanoseconds) or should be converted to datetime objects like other timestamp fields in this codebase. The inconsistency with datetime fields elsewhere (which use encode_datetime/datetime_from_unix_ns) poses a deserialization risk.


7134-7163: DenormalizedChannelFields — verify all fields match API specification for event payloads.

New class with all Optional fields (lines 7134–7163) used for denormalizing channel data in message/event payloads. Fields include created_at, id, team, type, custom, etc. Confirm this structure aligns with the Stream API spec for channel denormalization in events and that nullable field defaults are intentional.


4333-4334: delivery_events field added across multiple channel/feed config classes — verify placement and consistency.

The delivery_events boolean flag is added to several configuration classes as a required (non-optional) field. Line 4334: ChannelTypeConfig, Line 4410: ChannelTypeUpdateRequest, Line 5291: ChannelTypeResponse, Line 6274: ChannelTypeUpdateResponse, Line 9240: GetUnreadCountsResponse, Line 18536: UpdateChannelTypeResponse. Verify:

  1. Field is in the correct position within each dataclass
  2. Defaults and nullability align across request/response pairs
  3. This matches the actual API schema

Also applies to: 4410-4411, 5291-5292, 6274-6275, 9240-9241, 18536-18537


2022-2025: BlockActionRequest — verify new moderation action type is complete.

New BlockActionRequest class (lines 2022–2025) with optional reason field. Cross-reference with DeleteCommentRequest (hunk 42) and ShadowBlockActionRequest (hunk 71) to ensure moderation action patterns are consistent. Verify these classes are integrated into the StreamActionRequest (hunk 74, lines 17104–17106, 17113–17115, 17128–17130).


4293-4295: filter_tags field added to channel operations — verify API spec alignment.

New filter_tags field (Optional[List[str]]) added to:

  • Line 4293: ChannelData
  • Line 5121: ChannelResponse
  • Lines 18372–18374 & 18390–18392: UpdateChannelRequest (add_filter_tags / remove_filter_tags)

Confirm these additions are present in the API specification and that the add/remove pattern for tags is the intended design.

Also applies to: 5121-5123, 18372-18392


18354-18362: hide_history_before field — verify datetime encoding is correct.

New hide_history_before field (lines 18354–18362) in UpdateChannelRequest uses proper datetime encoding/decoding. Verify this field name and format match the API spec, and that the datetime_from_unix_ns decoder is appropriate for the server-side timestamp format.


15055-15590: Extensive SIP infrastructure classes — verify completeness against API spec.

Hunks 67–70 introduce comprehensive SIP management classes (ResolveSipInbound*, SIPConfigs, SIPChallenge, SIPInboundRoutingRule, SIPPinProtectionConfigs*, SIPTrunk*). These span 400+ lines with many new nested types. Spot-check:

  1. All required SIP authentication fields are present (e.g., SIPChallenge has realm, nonce, response, etc.)
  2. Request/response pairs are symmetric (CreateSIPTrunk* at lines 6616–6627, UpdateSIPTrunk* at lines 19052–19062)
  3. Confidence that UnixTs timestamps (lines 16055, 16056, 16115) are correctly scoped to this feature

4796-4808: ChannelMemberRequest type propagation verified — consistent usage across all request builders.

All requested spot-check locations confirm correct usage:

  • Lines 4634, 4637: invites and members in request class use Optional[List[ChannelMemberRequest]]
  • Line 14374: members field uses Optional[List[ChannelMemberRequest]]
  • Lines 18375, 18381, 18387: add_members, assign_roles, invites all use Optional[List[ChannelMemberRequest]]

Response models correctly retain ChannelMember (lines 4296, 4299). The separation of concerns is properly implemented with no type inconsistencies detected.

getstream/chat/rest_client.py (4)

226-278: LGTM! Type-safe member parameters and new filtering capabilities.

The changes correctly extend the update_channel method with:

  • hide_history_before for timestamp-based history control
  • add_filter_tags and remove_filter_tags for channel filtering
  • Type-safe ChannelMemberRequest for add_members, assign_roles, and invites

All parameters are optional and properly forwarded to the request payload.


641-710: LGTM! Delivery events configuration added.

The delivery_events parameter is correctly added to control delivery event notifications for the channel type. Properly typed and forwarded to the request payload.


733-813: LGTM! Consistent delivery events configuration.

The delivery_events parameter addition mirrors the change in create_channel_type, maintaining consistency across channel type operations.


1568-1576: LGTM! User-specific unread counts filtering.

The addition of the optional user_id parameter correctly enables filtering unread counts for a specific user. Properly uses query parameters for the GET request and maintains backward compatibility.

@rafaelmf3 rafaelmf3 merged commit 2cc7bd3 into main Nov 10, 2025
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants