Skip to content

feat(rn-dogfood): align e2ee meeting flow with react-dogfood - #2456

Merged
santhoshvai merged 1 commit into
e2eefrom
e2ee-rn-lobby-alignment
Sep 25, 2026
Merged

santhoshvai merged 1 commit into
e2eefrom
e2ee-rn-lobby-alignment

Conversation

@oliverlaz

Copy link
Copy Markdown
Member

💡 Overview

Follow-up to #2427. Aligns the RN dogfood E2EE meeting flow with react-dogfood: the key belongs to one meeting instead of a persisted global passphrase, and encryption is chosen on the join screen before the call is created, so a new call is encrypted from the start and never recreated.

📝 Implementation notes

  • Join screen: an End-to-end encryption switch (pronto envs only) generates a 3-word key, which is editable and regenerable. "Start a New Call" / "Join Call" pass it to MeetingScreen via route params. It is not persisted.
  • Lobby (LobbyEncryption): the creator sees the key with regenerate and Copy link. A joiner sees "Enabled by X", or a key field when the link had no key. Join stays disabled until a key is set. If a key is brought to an existing unencrypted call, a warning is shown and the join goes ahead in the clear instead of being rejected.
  • Key plumbing: a LobbyE2EEContext provided by MeetingScreen / GuestMeetingScreen feeds MeetingUI (attachE2EE(call, key)), the invite link, and the in-call key-mismatch banner.
  • Deep links: deeplinkCallId$ becomes deeplinkCall$ ({ callId, encryptionKey? }), so an encryption_key link opens that one meeting instead of writing MMKV.
  • Ringing calls: unchanged behaviour. They keep the persisted passphrase (there is no lobby for SDK-joined calls). The field moved to the Call screen.
  • Tests: deep-link and MeetingUI lifecycle tests updated. Added tests for invite links and for a key brought to an unencrypted call.

- choose encryption on the join screen, before the call is created, so a
  new call is encrypted from the start and never recreated
- keep the shared key per meeting (route + lobby) instead of a persisted
  global key; ringing calls keep the persisted passphrase on the Call screen
- lobby card: creator key with regenerate/copy link, joiner "Enabled by"
  banner or key entry, Join gated until a key is set, warning when a key is
  brought to an existing unencrypted call
- carry the key in invite links and encrypted deep links
- limit the e2ee UI to the pronto environments
@coderabbitai

coderabbitai Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 9a8558cf-94e6-4814-8d85-e87d281057dd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@oliverlaz oliverlaz added the backport-v1 PRs that need to be backported to the `release-v1` branch label Sep 24, 2026
@github-actions

Copy link
Copy Markdown

Bundle size

Built package output. Sizes in KB; delta vs e2ee@36349fd.

No main baseline available yet - showing absolute sizes only.

Package Unminified Minified Δ min vs main
@stream-io/video-client 802.4 KB 282.3 KB n/a
@stream-io/video-react-bindings 29.6 KB 10.0 KB n/a
@stream-io/video-react-sdk 376.7 KB 229.0 KB n/a
↳ install total (+ client + react-bindings) 1208.7 KB 521.3 KB n/a
@stream-io/video-react-sdk (embedded) (cjs) 218.8 KB 126.8 KB n/a
@stream-io/video-react-native-sdk 450.5 KB 205.7 KB n/a
↳ install total (+ client + react-bindings) 1282.5 KB 498.0 KB n/a
@stream-io/audio-filters-web (cjs) 4867.0 KB 4822.4 KB n/a
@stream-io/noise-cancellation-react-native 3.5 KB 1.0 KB n/a
@stream-io/react-native-callingx 15.5 KB 7.1 KB n/a
@stream-io/video-filters-react-native 2.1 KB 0.8 KB n/a
@stream-io/video-filters-web 122.4 KB 68.6 KB n/a

@santhoshvai
santhoshvai merged commit 2e83435 into e2ee Sep 25, 2026
8 checks passed
@santhoshvai
santhoshvai deleted the e2ee-rn-lobby-alignment branch September 25, 2026 15:25
@oliverlaz oliverlaz added backported-v1 Already backported to the `release-v1` branch and removed backport-v1 PRs that need to be backported to the `release-v1` branch labels Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backported-v1 Already backported to the `release-v1` branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants