Skip to content

chore: Update media-signaling to 0.2.0#7153

Merged
diegolmello merged 13 commits intofeat.voip-lib-newfrom
chore.update-media-signaling
Apr 14, 2026
Merged

chore: Update media-signaling to 0.2.0#7153
diegolmello merged 13 commits intofeat.voip-lib-newfrom
chore.update-media-signaling

Conversation

@diegolmello
Copy link
Copy Markdown
Member

@diegolmello diegolmello commented Apr 14, 2026

Proposed changes

Issue(s)

How to test or reproduce

Screenshots

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • Improvement (non-breaking change which improves a current function)
  • New feature (non-breaking change which adds functionality)
  • Documentation update (if none of the other choices apply)

Checklist

  • I have read the CONTRIBUTING doc
  • I have signed the CLA
  • Lint and unit tests pass locally with my changes
  • I have added tests that prove my fix is effective or that my feature works (if applicable)
  • I have added necessary documentation (if applicable)
  • Any dependent changes have been merged and published in downstream modules

Further comments

Summary by CodeRabbit

  • Chores
    • Updated media signaling dependency to the stable release version.
  • Improvements
    • Call handling updated to use a structured participant model, improving accuracy of caller/recipient presence and contact info.
    • Mute/hold controls and call state updates now reflect participant-level changes reliably.
    • Adjusted signaling initialization to improve synchronization and call startup stability.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 14, 2026

Caution

Review failed

Pull request was closed or merged during review

Walkthrough

Refactors voip call data shape from top-level fields to structured participants, updates related logic and tests, adjusts MediaSignalingSession initialization option, simplifies a REST SDK call, and updates a local package file dependency reference.

Changes

Cohort / File(s) Summary
Dependency
package.json
Updated local file dependency for @rocket.chat/media-signaling from file:./packages/rocket.chat-media-signaling-0.2.0-rc.0.tgzfile:./packages/rocket.chat-media-signaling-0.2.0.tgz.
REST API
app/lib/services/restApi.ts
Added type-only import ServerMediaSignal; inlined SDK get call in mediaCallsStateSignals(...) preserving return shape and catch behavior.
Media session runtime
app/lib/services/voip/MediaSessionInstance.ts, app/lib/services/voip/MediaSessionStore.ts
Adapted call accessors to getCallData(...); changed call-role checks to localParticipant.role; made resolveRoomIdFromContact accept `CallContact
Call model & store logic
app/lib/services/voip/useCallStore.ts, app/lib/services/voip/mockCall.ts
Call shape migrated: removed top-level mute/hold/contact fields in favor of localParticipant and remoteParticipants objects; updated store initialization, event handlers, and toggle actions to read/update via localParticipant and first remoteParticipants[0].
Tests & mocks
app/lib/services/voip/MediaSessionInstance.test.ts, app/lib/services/voip/useCallStore.test.ts
Updated mocks and tests to the new call shape: replaced getMainCallgetCallData, adjusted fixtures to nest contact under remoteParticipants[0].contact, and updated helpers to build calls with localParticipant/remoteParticipants.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main change: updating the media-signaling dependency from 0.2.0-rc.0 to 0.2.0 across multiple files and refactoring related code to use the new API.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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
Copy Markdown
Contributor

@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

🧹 Nitpick comments (1)
app/lib/services/voip/mockCall.ts (1)

44-44: Hardcoded role: 'callee' removes mock flexibility for outgoing call scenarios.

The role is now hardcoded to 'callee', but the MockCallOverrides interface never included a role property, so this doesn't break the existing API contract. However, if future tests or dev scenarios need to simulate outgoing calls (where role === 'caller' triggers auto-navigation per MediaSessionInstance.ts line 107), this mock won't support that case.

Consider whether adding role?: 'caller' | 'callee' to MockCallOverrides would be valuable for broader test coverage.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/lib/services/voip/mockCall.ts` at line 44, The mock currently hardcodes
role: 'callee' in createMockCall (mockCall.ts) which prevents simulating
outgoing calls; update the MockCallOverrides type to include role?: 'caller' |
'callee' and change the object construction in createMockCall (or equivalent
factory) to use the provided overrides.role with a default of 'callee' so tests
can pass { role: 'caller' } to simulate outgoing behavior (this aligns with
MediaSessionInstance logic that checks role).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@app/lib/services/voip/MediaSessionInstance.ts`:
- Line 68: Delete the commented-out call to instance.register(false) in
MediaSessionInstance.ts or, if you intentionally keep it for future reference,
replace it with a brief explanatory comment stating that registration is now
handled via MediaSessionStore's autoSync: true and why the commented line is
retained (e.g., "kept for upgrade validation" or "left as reference during
library upgrade"); reference the symbol instance.register(false) and
MediaSessionStore.autoSync to make purpose clear.

---

Nitpick comments:
In `@app/lib/services/voip/mockCall.ts`:
- Line 44: The mock currently hardcodes role: 'callee' in createMockCall
(mockCall.ts) which prevents simulating outgoing calls; update the
MockCallOverrides type to include role?: 'caller' | 'callee' and change the
object construction in createMockCall (or equivalent factory) to use the
provided overrides.role with a default of 'callee' so tests can pass { role:
'caller' } to simulate outgoing behavior (this aligns with MediaSessionInstance
logic that checks role).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: dd1d174b-f641-4388-8ca7-9ca1ae3f9c35

📥 Commits

Reviewing files that changed from the base of the PR and between 87c7f83 and 4814629.

📒 Files selected for processing (6)
  • app/lib/services/restApi.ts
  • app/lib/services/voip/MediaSessionInstance.test.ts
  • app/lib/services/voip/MediaSessionInstance.ts
  • app/lib/services/voip/MediaSessionStore.ts
  • app/lib/services/voip/mockCall.ts
  • app/lib/services/voip/useCallStore.test.ts
✅ Files skipped from review due to trivial changes (3)
  • app/lib/services/voip/useCallStore.test.ts
  • app/lib/services/voip/MediaSessionInstance.test.ts
  • app/lib/services/restApi.ts
📜 Review details
⏰ 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). (2)
  • GitHub Check: ESLint and Test / run-eslint-and-test
  • GitHub Check: format
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{js,jsx,ts,tsx,json}

📄 CodeRabbit inference engine (CLAUDE.md)

Configure Prettier with tabs, single quotes, 130 character width, no trailing commas, arrow parens avoid, and bracket same line

Files:

  • app/lib/services/voip/MediaSessionStore.ts
  • app/lib/services/voip/MediaSessionInstance.ts
  • app/lib/services/voip/mockCall.ts
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Use ESLint with @rocket.chat/eslint-config base configuration including React, React Native, TypeScript, and Jest plugins

Files:

  • app/lib/services/voip/MediaSessionStore.ts
  • app/lib/services/voip/MediaSessionInstance.ts
  • app/lib/services/voip/mockCall.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Use TypeScript with strict mode enabled and configure baseUrl to app/ for import resolution

**/*.{ts,tsx}: Use TypeScript for type safety; add explicit type annotations to function parameters and return types
Prefer interfaces over type aliases for defining object shapes in TypeScript
Use enums for sets of related constants rather than magic strings or numbers

Files:

  • app/lib/services/voip/MediaSessionStore.ts
  • app/lib/services/voip/MediaSessionInstance.ts
  • app/lib/services/voip/mockCall.ts
app/lib/services/voip/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Implement VoIP with WebRTC peer-to-peer audio calls in app/lib/services/voip/ using Zustand stores instead of Redux, with native CallKit (iOS) and Telecom (Android) integration; keep VoIP and VideoConf separate

Files:

  • app/lib/services/voip/MediaSessionStore.ts
  • app/lib/services/voip/MediaSessionInstance.ts
  • app/lib/services/voip/mockCall.ts
**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{js,ts,jsx,tsx}: Use descriptive names for functions, variables, and classes that clearly convey their purpose
Write comments that explain the 'why' behind code decisions, not the 'what'
Keep functions small and focused on a single responsibility
Use const by default, let when reassignment is needed, and avoid var
Prefer async/await over .then() chains for handling asynchronous operations
Use explicit error handling with try/catch blocks for async operations
Avoid deeply nested code; refactor complex logic into helper functions

Files:

  • app/lib/services/voip/MediaSessionStore.ts
  • app/lib/services/voip/MediaSessionInstance.ts
  • app/lib/services/voip/mockCall.ts
🧠 Learnings (5)
📓 Common learnings
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/lib/services/voip/**/*.{ts,tsx} : Implement VoIP with WebRTC peer-to-peer audio calls in app/lib/services/voip/ using Zustand stores instead of Redux, with native CallKit (iOS) and Telecom (Android) integration; keep VoIP and VideoConf separate
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/lib/services/voip/**/*.{ts,tsx} : Implement VoIP with WebRTC peer-to-peer audio calls in app/lib/services/voip/ using Zustand stores instead of Redux, with native CallKit (iOS) and Telecom (Android) integration; keep VoIP and VideoConf separate

Applied to files:

  • app/lib/services/voip/MediaSessionStore.ts
  • app/lib/services/voip/MediaSessionInstance.ts
  • app/lib/services/voip/mockCall.ts
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to @(app/sagas/videoConf.ts|app/lib/methods/videoConf.ts) : Manage video conferencing via Redux actions/reducers/sagas in app/sagas/videoConf.ts and app/lib/methods/videoConf.ts using server-managed Jitsi integration; do not conflate with VoIP

Applied to files:

  • app/lib/services/voip/MediaSessionStore.ts
  • app/lib/services/voip/MediaSessionInstance.ts
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/lib/store/**/*.{ts,tsx} : Configure Redux store in app/lib/store/ with middleware for saga, app state, and internet state

Applied to files:

  • app/lib/services/voip/MediaSessionInstance.ts
📚 Learning: 2026-03-30T15:49:30.957Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6875
File: app/containers/RoomItem/Actions.tsx:12-12
Timestamp: 2026-03-30T15:49:30.957Z
Learning: In RocketChat/Rocket.Chat.ReactNative, `react-native-worklets` version 0.6.1 does NOT export a built-in Jest mock (e.g., no `react-native-worklets/lib/module/mock`). The correct Jest mock approach for this version is to add a manual mock in `jest.setup.js`: `jest.mock('react-native-worklets', () => ({ scheduleOnRN: jest.fn((fn, ...args) => fn(...args)) }))`.

Applied to files:

  • app/lib/services/voip/mockCall.ts
🔇 Additional comments (4)
app/lib/services/voip/mockCall.ts (1)

4-4: LGTM on the Navigation import update.

The direct import of Navigation from appNavigation is correct and aligns with the module's exported API.

app/lib/services/voip/MediaSessionInstance.ts (2)

18-18: LGTM on the import path correction.

The relative path ../restApi correctly references app/lib/services/restApi.ts from the voip subdirectory.


130-130: Minor destructuring refactor looks fine.

The change from const call = useCallStore.getState().call to const { call } = useCallStore.getState() is a stylistic improvement with no functional change.

Also applies to: 163-163

app/lib/services/voip/MediaSessionStore.ts (1)

71-71: No action needed — autoSync is a valid option in @rocket.chat/media-signaling 0.2.0.

The constructor option change from requestInitialStateSignals: false to autoSync: true is valid. The type definition confirms autoSync?: boolean; is a documented config option in MediaSignalingSessionConfig.

@diegolmello diegolmello requested a deployment to approve_e2e_testing April 14, 2026 22:34 — with GitHub Actions Waiting
@diegolmello diegolmello merged commit bb47935 into feat.voip-lib-new Apr 14, 2026
5 of 7 checks passed
@diegolmello diegolmello deleted the chore.update-media-signaling branch April 14, 2026 22:39
@diegolmello diegolmello requested a deployment to experimental_android_build April 14, 2026 22:39 — with GitHub Actions Waiting
@diegolmello diegolmello requested a deployment to official_android_build April 14, 2026 22:39 — with GitHub Actions Waiting
@diegolmello diegolmello requested a deployment to experimental_ios_build April 14, 2026 22:39 — with GitHub Actions Waiting
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant