Conversation
📝 WalkthroughWalkthroughThis pull request updates the OpenAPI models from version 202.0.0 to 219.11.0, introducing support for granular recording type control (individual and raw recording modes), moderation events, new call settings, and expanded recording-related configurations across the Call API and its event handling infrastructure. Changes
Sequence Diagram(s)sequenceDiagram
participant App as Application
participant Call as Call SDK
participant PermMgr as Permissions Manager
participant Coordinator as Coordinator Client
participant API as OpenAPI Endpoint
App->>Call: startRecording(recordingType: RecordingType.individual)
Call->>PermMgr: startRecording(recordingType)
PermMgr->>PermMgr: _startRecordPermission(recordingType)
PermMgr->>Call: Check permission (start-individual-record-call)
Call->>Coordinator: startRecording(recordingType: individual)
Coordinator->>API: POST /calls/{id}/recordings/individual/start
API-->>Coordinator: Success
Coordinator-->>Call: Result<None>
Call-->>PermMgr: Result<None>
PermMgr-->>App: Result<None>
sequenceDiagram
participant App as Application
participant Call as Call SDK
participant EventMapper as Event Mapper
participant CoordEvents as Coordinator Events
participant CallEvents as Call Events
API->>EventMapper: Receive call.moderation_blur event
EventMapper->>EventMapper: Parse callModerationBlur field
EventMapper->>CoordEvents: Create CoordinatorCallModerationBlurEvent
CoordEvents->>EventMapper: Return CoordEvent instance
EventMapper->>CallEvents: Map to StreamCallModerationBlurEvent
CallEvents->>Call: Emit event to subscribers
Call->>App: Notify listeners of moderation action
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Rationale: This diff is heterogeneous with significant scope spanning auto-generated OpenAPI models (~10+ new classes), extended existing OpenAPI models with new enum types and transformers, and substantial SDK-level changes across call management, event handling, permissions, and coordinator integration. While many changes follow repetitive patterns (e.g., adding fields to models), the diversity of change types (new enums, transformers, recording type pipelines, permission mappings, event routing) and the interconnected nature of recording-type propagation across multiple layers demand careful reasoning about consistency, backward compatibility, and correct enum/type conversions. Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/stream_video/lib/src/coordinator/retry/coordinator_client_retry.dart (1)
738-782:⚠️ Potential issue | 🟠 MajorAdd missing
broadcastingparameter to delegate call inupdateCall.The
updateCallmethod accepts abroadcastingparameter (line 751) but fails to forward it to_delegate.updateCall(...). This is a pre-existing bug in the retry wrapper—since you're already modifying this method to addindividualRecordingandrawRecording, fix this omission as well.Proposed fix
() => _delegate.updateCall( callCid: callCid, custom: custom, startsAt: startsAt, ring: ring, audio: audio, video: video, screenShare: screenShare, recording: recording, transcription: transcription, backstage: backstage, geofencing: geofencing, limits: limits, + broadcasting: broadcasting, session: session, frameRecording: frameRecording, individualRecording: individualRecording, rawRecording: rawRecording, ingress: ingress, ),
🧹 Nitpick comments (3)
packages/stream_video/lib/src/coordinator/coordinator_client.dart (1)
255-266: Add documentation clarifying the relationship betweenstartRecordingand the granular recording type flags ingoLive.The
goLivemethod signature now includes bothstartRecordingand granular recording type flags (startCompositeRecording,startIndividualRecording,startRawRecording), but lacks explanation of their purpose and interaction. A doc comment should clarify whetherstartRecordingis a legacy parameter, a convenience flag, or serves a distinct purpose compared to the granular options.packages/stream_video/test/src/call/call_coordinator_events_test.dart (1)
685-685: Tests only coverRecordingType.composite.Consider adding test cases for
RecordingType.individualandRecordingType.rawto ensure recording state transitions work correctly for all recording types.Also applies to: 705-705, 716-716, 736-736, 747-747
packages/stream_video/lib/src/models/call_settings.dart (1)
43-44:CallSettings.propsdoes not include the new fields (nor most existing ones).
propsonly lists[audio, video, screenShare], omittingindividualRecording,rawRecording, and many other fields. This meansEquatableequality checks andhashCodewon't account for these settings. This is a pre-existing issue, but worth noting since you're adding more fields that are excluded.♻️ Suggested fix
`@override` - List<Object?> get props => [audio, video, screenShare]; + List<Object?> get props => [ + ring, + audio, + video, + screenShare, + recording, + broadcasting, + transcription, + backstage, + geofencing, + limits, + session, + frameRecording, + individualRecording, + rawRecording, + ingress, + ];
Summary by CodeRabbit
Release Notes
New Features
Updates