@ethora/chat-component-rn 26.10.4 → 26.10.5

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.
Files changed (100) hide show
  1. package/lib/commonjs/components/VideoCalls/ActiveCallBar.js +61 -16
  2. package/lib/commonjs/components/VideoCalls/ActiveCallBar.js.map +1 -1
  3. package/lib/commonjs/components/VideoCalls/CallIcons.js +41 -16
  4. package/lib/commonjs/components/VideoCalls/CallIcons.js.map +1 -1
  5. package/lib/commonjs/components/VideoCalls/VideoCallOverlay.js +183 -9
  6. package/lib/commonjs/components/VideoCalls/VideoCallOverlay.js.map +1 -1
  7. package/lib/commonjs/components/VideoCalls/VideoCallSession.js +40 -15
  8. package/lib/commonjs/components/VideoCalls/VideoCallSession.js.map +1 -1
  9. package/lib/commonjs/components/VideoCalls/callSessionController.js +49 -26
  10. package/lib/commonjs/components/VideoCalls/callSessionController.js.map +1 -1
  11. package/lib/commonjs/components/VideoCalls/callUiStore.js +33 -4
  12. package/lib/commonjs/components/VideoCalls/callUiStore.js.map +1 -1
  13. package/lib/commonjs/components/VideoCalls/livekitRuntime.js +9 -1
  14. package/lib/commonjs/components/VideoCalls/livekitRuntime.js.map +1 -1
  15. package/lib/commonjs/components/VideoCalls/useCallKeep.js +197 -28
  16. package/lib/commonjs/components/VideoCalls/useCallKeep.js.map +1 -1
  17. package/lib/commonjs/components/VideoCalls/useOngoingCallNotification.js +88 -0
  18. package/lib/commonjs/components/VideoCalls/useOngoingCallNotification.js.map +1 -0
  19. package/lib/commonjs/components/VideoCalls/usePipTile.js +232 -0
  20. package/lib/commonjs/components/VideoCalls/usePipTile.js.map +1 -0
  21. package/lib/commonjs/helpers/updateMessagesTillLast.js +3 -1
  22. package/lib/commonjs/helpers/updateMessagesTillLast.js.map +1 -1
  23. package/lib/commonjs/i18n/strings.js +48 -0
  24. package/lib/commonjs/i18n/strings.js.map +1 -1
  25. package/lib/commonjs/main.js.map +1 -1
  26. package/lib/commonjs/version.js +1 -1
  27. package/lib/module/components/VideoCalls/ActiveCallBar.js +63 -18
  28. package/lib/module/components/VideoCalls/ActiveCallBar.js.map +1 -1
  29. package/lib/module/components/VideoCalls/CallIcons.js +38 -15
  30. package/lib/module/components/VideoCalls/CallIcons.js.map +1 -1
  31. package/lib/module/components/VideoCalls/VideoCallOverlay.js +185 -11
  32. package/lib/module/components/VideoCalls/VideoCallOverlay.js.map +1 -1
  33. package/lib/module/components/VideoCalls/VideoCallSession.js +41 -16
  34. package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
  35. package/lib/module/components/VideoCalls/callSessionController.js +46 -24
  36. package/lib/module/components/VideoCalls/callSessionController.js.map +1 -1
  37. package/lib/module/components/VideoCalls/callUiStore.js +30 -3
  38. package/lib/module/components/VideoCalls/callUiStore.js.map +1 -1
  39. package/lib/module/components/VideoCalls/livekitRuntime.js +9 -1
  40. package/lib/module/components/VideoCalls/livekitRuntime.js.map +1 -1
  41. package/lib/module/components/VideoCalls/useCallKeep.js +198 -29
  42. package/lib/module/components/VideoCalls/useCallKeep.js.map +1 -1
  43. package/lib/module/components/VideoCalls/useOngoingCallNotification.js +84 -0
  44. package/lib/module/components/VideoCalls/useOngoingCallNotification.js.map +1 -0
  45. package/lib/module/components/VideoCalls/usePipTile.js +228 -0
  46. package/lib/module/components/VideoCalls/usePipTile.js.map +1 -0
  47. package/lib/module/helpers/updateMessagesTillLast.js +3 -1
  48. package/lib/module/helpers/updateMessagesTillLast.js.map +1 -1
  49. package/lib/module/i18n/strings.js +48 -0
  50. package/lib/module/i18n/strings.js.map +1 -1
  51. package/lib/module/main.js.map +1 -1
  52. package/lib/module/version.js +1 -1
  53. package/lib/typescript/components/VideoCalls/ActiveCallBar.d.ts +9 -3
  54. package/lib/typescript/components/VideoCalls/ActiveCallBar.d.ts.map +1 -1
  55. package/lib/typescript/components/VideoCalls/CallIcons.d.ts +9 -0
  56. package/lib/typescript/components/VideoCalls/CallIcons.d.ts.map +1 -1
  57. package/lib/typescript/components/VideoCalls/VideoCallOverlay.d.ts.map +1 -1
  58. package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
  59. package/lib/typescript/components/VideoCalls/callSessionController.d.ts +7 -0
  60. package/lib/typescript/components/VideoCalls/callSessionController.d.ts.map +1 -1
  61. package/lib/typescript/components/VideoCalls/callUiStore.d.ts +13 -0
  62. package/lib/typescript/components/VideoCalls/callUiStore.d.ts.map +1 -1
  63. package/lib/typescript/components/VideoCalls/livekitRuntime.d.ts +5 -0
  64. package/lib/typescript/components/VideoCalls/livekitRuntime.d.ts.map +1 -1
  65. package/lib/typescript/components/VideoCalls/useCallKeep.d.ts +12 -0
  66. package/lib/typescript/components/VideoCalls/useCallKeep.d.ts.map +1 -1
  67. package/lib/typescript/components/VideoCalls/useOngoingCallNotification.d.ts +10 -0
  68. package/lib/typescript/components/VideoCalls/useOngoingCallNotification.d.ts.map +1 -0
  69. package/lib/typescript/components/VideoCalls/usePipTile.d.ts +46 -0
  70. package/lib/typescript/components/VideoCalls/usePipTile.d.ts.map +1 -0
  71. package/lib/typescript/helpers/updateMessagesTillLast.d.ts.map +1 -1
  72. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  73. package/lib/typescript/main.d.ts +1 -1
  74. package/lib/typescript/main.d.ts.map +1 -1
  75. package/lib/typescript/types/types.d.ts +40 -0
  76. package/lib/typescript/types/types.d.ts.map +1 -1
  77. package/lib/typescript/version.d.ts +1 -1
  78. package/package.json +1 -1
  79. package/src/components/VideoCalls/ActiveCallBar.tsx +56 -10
  80. package/src/components/VideoCalls/CallIcons.tsx +36 -12
  81. package/src/components/VideoCalls/VideoCallOverlay.tsx +205 -8
  82. package/src/components/VideoCalls/VideoCallSession.tsx +45 -13
  83. package/src/components/VideoCalls/callSessionController.ts +51 -20
  84. package/src/components/VideoCalls/callUiStore.ts +33 -3
  85. package/src/components/VideoCalls/livekitRuntime.ts +13 -0
  86. package/src/components/VideoCalls/useCallKeep.ts +204 -33
  87. package/src/components/VideoCalls/useOngoingCallNotification.ts +113 -0
  88. package/src/components/VideoCalls/usePipTile.ts +214 -0
  89. package/src/helpers/updateMessagesTillLast.tsx +2 -1
  90. package/src/i18n/strings.ts +48 -0
  91. package/src/main.ts +3 -0
  92. package/src/types/types.ts +48 -0
  93. package/src/version.ts +1 -1
  94. package/lib/commonjs/components/VideoCalls/useDraggable.js +0 -59
  95. package/lib/commonjs/components/VideoCalls/useDraggable.js.map +0 -1
  96. package/lib/module/components/VideoCalls/useDraggable.js +0 -55
  97. package/lib/module/components/VideoCalls/useDraggable.js.map +0 -1
  98. package/lib/typescript/components/VideoCalls/useDraggable.d.ts +0 -19
  99. package/lib/typescript/components/VideoCalls/useDraggable.d.ts.map +0 -1
  100. package/src/components/VideoCalls/useDraggable.ts +0 -46
@@ -32,6 +32,7 @@ const IDLE = {
32
32
  cameraOn: false,
33
33
  speakerOn: false,
34
34
  facingMode: 'user',
35
+ localVideoEpoch: 0,
35
36
  remoteVideo: null,
36
37
  localVideo: null,
37
38
  remoteName: null,
@@ -272,7 +273,14 @@ export const startCallSession = ({
272
273
  // Claims audio focus and sets the right native audio mode. Must
273
274
  // start BEFORE connecting or the first seconds route to the earpiece
274
275
  // on Android even for a video call.
275
- await AudioSession.startAudioSession();
276
+ try {
277
+ await AudioSession.startAudioSession();
278
+ } catch {
279
+ // A call answered from the CallKit banner: CallKit owns the iOS
280
+ // audio session and activates it itself (useCallKeep forwards that
281
+ // to WebRTC), so our own activation is refused. Not a reason to
282
+ // fail the call.
283
+ }
276
284
  await room.connect(livekitUrl, token);
277
285
  } catch (error) {
278
286
  if (current.disposed) {
@@ -331,12 +339,14 @@ export const startCallSession = ({
331
339
 
332
340
  // ---- controls -----------------------------------------------------------
333
341
 
334
- export const toggleCallMic = async () => {
342
+ export const toggleCallMic = () => setCallMicEnabled(!snapshot.micOn);
343
+
344
+ /** Set the mic to a given state (system call UI reports absolute values). */
345
+ export const setCallMicEnabled = async next => {
335
346
  const current = session;
336
- if (!current) {
347
+ if (!current || snapshot.micOn === next) {
337
348
  return;
338
349
  }
339
- const next = !snapshot.micOn;
340
350
  emit({
341
351
  micOn: next
342
352
  });
@@ -372,40 +382,52 @@ export const toggleCallCamera = async () => {
372
382
  }
373
383
  }
374
384
  };
385
+ let switchingCamera = false;
375
386
  export const switchCallCamera = async () => {
376
387
  const current = session;
377
388
  const runtime = loadLiveKit();
378
- if (!current || !runtime) {
389
+ if (!current || !runtime || switchingCamera) {
379
390
  return;
380
391
  }
381
- const mediaTrack = current.room.localParticipant.getTrackPublication?.(runtime.Track.Source.Camera)?.track?.mediaStreamTrack;
382
- if (!mediaTrack?.applyConstraints) {
392
+ const track = current.room.localParticipant.getTrackPublication?.(runtime.Track.Source.Camera)?.track;
393
+ if (!track?.restartTrack) {
383
394
  return;
384
395
  }
385
396
  const next = snapshot.facingMode === 'user' ? 'environment' : 'user';
397
+ switchingCamera = true;
386
398
  try {
387
- // Swap the capture device inside the SAME track (react-native-webrtc's
388
- // own camera switch). `restartTrack` stopped the published track and
389
- // made a new one, and the native view kept showing the stopped stream:
390
- // the picture froze on the switch.
391
- // Keep the current capture settings (resolution, frame rate) and only
392
- // flip the camera, exactly like the library's `_switchCamera`.
393
- const constraints = {
394
- ...(mediaTrack.getSettings?.() || {})
395
- };
396
- delete constraints.deviceId;
397
- await mediaTrack.applyConstraints({
398
- ...constraints,
399
- facingMode: next
399
+ // A real device change needs a new capture: react-native-webrtc's
400
+ // native applyConstraints only applies width/height/frameRate and
401
+ // ignores facingMode on both platforms, so the old approach kept the
402
+ // front camera and merely flipped our mirror flag (the picture looked
403
+ // swapped left to right). restartTrack re-acquires the camera with
404
+ // the new facing mode and swaps it into the published sender; the
405
+ // <VideoTrack /> view follows it through TrackEvent.Restarted.
406
+ await track.restartTrack({
407
+ facingMode: next,
408
+ ...(runtime.VideoPresets ? {
409
+ resolution: runtime.VideoPresets.h720.resolution
410
+ } : {})
411
+ });
412
+ if (current.disposed) {
413
+ return;
414
+ }
415
+ // Trust what the camera reports: a device with a single camera stays
416
+ // on it, and the mirror must follow the real camera, not the request.
417
+ const actual = track.mediaStreamTrack?.getSettings?.()?.facingMode;
418
+ emit({
419
+ facingMode: actual === 'user' || actual === 'environment' ? actual : next,
420
+ localVideoEpoch: snapshot.localVideoEpoch + 1
400
421
  });
422
+ resync();
423
+ } catch (error) {
401
424
  if (!current.disposed) {
402
425
  emit({
403
- facingMode: next
426
+ deviceError: humanizeDeviceError(error)
404
427
  });
405
428
  }
406
- resync();
407
- } catch {
408
- // Single camera, or the switch is still in flight.
429
+ } finally {
430
+ switchingCamera = false;
409
431
  }
410
432
  };
411
433
  export const toggleCallSpeaker = async () => {
@@ -1 +1 @@
1
- {"version":3,"names":["useSyncExternalStore","Platform","store","setCallError","setCallPhase","ensureLiveKitGlobals","loadLiveKit","terminateActiveCall","translateCallString","IDLE","active","connected","deviceError","micOn","cameraOn","speakerOn","facingMode","remoteVideo","localVideo","remoteName","remoteJoined","remoteMicMuted","anchorAt","session","snapshot","listeners","Set","storeUnsubscribe","emit","patch","forEach","listener","subscribe","add","delete","getSnapshot","useCallSession","sessionKey","livekitUrl","token","humanizeDeviceError","error","name","text","String","message","toLowerCase","includes","liveVideoRef","participant","Track","publication","getTrackPublication","Source","Camera","track","isMuted","source","joinedAtMs","value","joinedAt","ms","Date","getTime","Number","isFinite","resync","current","runtime","disposed","room","remote","Array","from","remoteParticipants","values","everJoined","remoteMic","Microphone","localJoined","localParticipant","remoteJoinedAt","identity","Math","max","now","stopCallSession","removeAllListeners","disconnect","AudioSession","stopAudioSession","ensureStoreWatcher","call","getState","live","phase","key","endsWith","startCallSession","kind","startWithMicOn","startWithCameraOn","dispatch","Room","RoomEvent","VideoPresets","adaptiveStream","pixelDensity","dynacast","publishDefaults","videoSimulcastLayers","h540","h216","videoCaptureDefaults","resolution","h720","onChange","on","TrackSubscribed","TrackUnsubscribed","TrackPublished","TrackUnpublished","LocalTrackPublished","LocalTrackUnpublished","TrackMuted","TrackUnmuted","ParticipantConnected","MediaDevicesError","ParticipantDisconnected","size","Disconnected","startAudioSession","connect","setMicrophoneEnabled","setCameraEnabled","setAppleAudioConfiguration","audioCategory","audioCategoryOptions","audioMode","toggleCallMic","next","toggleCallCamera","switchCallCamera","mediaTrack","mediaStreamTrack","applyConstraints","constraints","getSettings","deviceId","toggleCallSpeaker","OS","selectAudioOutput","dismissCallDeviceError","__resetCallSessionForTests"],"sourceRoot":"../../../../src","sources":["components/VideoCalls/callSessionController.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useSyncExternalStore","Platform","store","setCallError","setCallPhase","ensureLiveKitGlobals","loadLiveKit","terminateActiveCall","translateCallString","IDLE","active","connected","deviceError","micOn","cameraOn","speakerOn","facingMode","localVideoEpoch","remoteVideo","localVideo","remoteName","remoteJoined","remoteMicMuted","anchorAt","session","snapshot","listeners","Set","storeUnsubscribe","emit","patch","forEach","listener","subscribe","add","delete","getSnapshot","useCallSession","sessionKey","livekitUrl","token","humanizeDeviceError","error","name","text","String","message","toLowerCase","includes","liveVideoRef","participant","Track","publication","getTrackPublication","Source","Camera","track","isMuted","source","joinedAtMs","value","joinedAt","ms","Date","getTime","Number","isFinite","resync","current","runtime","disposed","room","remote","Array","from","remoteParticipants","values","everJoined","remoteMic","Microphone","localJoined","localParticipant","remoteJoinedAt","identity","Math","max","now","stopCallSession","removeAllListeners","disconnect","AudioSession","stopAudioSession","ensureStoreWatcher","call","getState","live","phase","key","endsWith","startCallSession","kind","startWithMicOn","startWithCameraOn","dispatch","Room","RoomEvent","VideoPresets","adaptiveStream","pixelDensity","dynacast","publishDefaults","videoSimulcastLayers","h540","h216","videoCaptureDefaults","resolution","h720","onChange","on","TrackSubscribed","TrackUnsubscribed","TrackPublished","TrackUnpublished","LocalTrackPublished","LocalTrackUnpublished","TrackMuted","TrackUnmuted","ParticipantConnected","MediaDevicesError","ParticipantDisconnected","size","Disconnected","startAudioSession","connect","setMicrophoneEnabled","setCameraEnabled","setAppleAudioConfiguration","audioCategory","audioCategoryOptions","audioMode","toggleCallMic","setCallMicEnabled","next","toggleCallCamera","switchingCamera","switchCallCamera","restartTrack","actual","mediaStreamTrack","getSettings","toggleCallSpeaker","OS","selectAudioOutput","dismissCallDeviceError","__resetCallSessionForTests"],"sourceRoot":"../../../../src","sources":["components/VideoCalls/callSessionController.ts"],"mappings":"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","ignoreList":[]}
@@ -18,7 +18,9 @@ import { store } from '../../roomStore';
18
18
 
19
19
  let state = {
20
20
  minimized: false,
21
- barHost: null
21
+ systemRinging: false,
22
+ barHost: null,
23
+ barAnchorY: null
22
24
  };
23
25
  const hosts = [];
24
26
  let nextHostId = 1;
@@ -38,11 +40,17 @@ const ensureStoreWatcher = () => {
38
40
  return;
39
41
  }
40
42
  storeUnsubscribe = store.subscribe(() => {
41
- if (state.minimized && store.getState().call.phase === 'idle') {
43
+ const phase = store.getState().call.phase;
44
+ if (state.minimized && phase === 'idle') {
42
45
  emit({
43
46
  minimized: false
44
47
  });
45
48
  }
49
+ if (state.systemRinging && phase !== 'ringing-incoming') {
50
+ emit({
51
+ systemRinging: false
52
+ });
53
+ }
46
54
  });
47
55
  };
48
56
  const subscribe = listener => {
@@ -64,6 +72,13 @@ export const setCallMinimized = minimized => {
64
72
  });
65
73
  }
66
74
  };
75
+ export const setCallSystemRinging = systemRinging => {
76
+ if (state.systemRinging !== systemRinging) {
77
+ emit({
78
+ systemRinging
79
+ });
80
+ }
81
+ };
67
82
  export const registerCallBarHost = onId => {
68
83
  const id = nextHostId++;
69
84
  hosts.push(id);
@@ -76,9 +91,21 @@ export const registerCallBarHost = onId => {
76
91
  if (index >= 0) {
77
92
  hosts.splice(index, 1);
78
93
  }
94
+ const next = hosts.length ? hosts[hosts.length - 1] : null;
79
95
  emit({
80
- barHost: hosts.length ? hosts[hosts.length - 1] : null
96
+ barHost: next,
97
+ barAnchorY: next === null ? null : state.barAnchorY
81
98
  });
82
99
  };
83
100
  };
101
+
102
+ /** The hosting header reports where its strip slot is on screen. */
103
+ export const setCallBarAnchor = (hostId, y) => {
104
+ if (state.barHost !== hostId || state.barAnchorY === y) {
105
+ return;
106
+ }
107
+ emit({
108
+ barAnchorY: y
109
+ });
110
+ };
84
111
  //# sourceMappingURL=callUiStore.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useSyncExternalStore","store","state","minimized","barHost","hosts","nextHostId","listeners","Set","storeUnsubscribe","emit","patch","forEach","listener","ensureStoreWatcher","subscribe","getState","call","phase","add","delete","getSnapshot","getCallUiState","useCallUi","setCallMinimized","registerCallBarHost","onId","id","push","index","indexOf","splice","length"],"sourceRoot":"../../../../src","sources":["components/VideoCalls/callUiStore.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,OAAO;AAC5C,SAASC,KAAK,QAAQ,iBAAiB;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,IAAIC,KAAkB,GAAG;EAAEC,SAAS,EAAE,KAAK;EAAEC,OAAO,EAAE;AAAK,CAAC;AAC5D,MAAMC,KAAe,GAAG,EAAE;AAC1B,IAAIC,UAAU,GAAG,CAAC;AAClB,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAa,CAAC;AACvC,IAAIC,gBAAqC,GAAG,IAAI;AAEhD,MAAMC,IAAI,GAAIC,KAA2B,IAAK;EAC5CT,KAAK,GAAG;IAAE,GAAGA,KAAK;IAAE,GAAGS;EAAM,CAAC;EAC9BJ,SAAS,CAACK,OAAO,CAAEC,QAAQ,IAAKA,QAAQ,CAAC,CAAC,CAAC;AAC7C,CAAC;;AAED;AACA,MAAMC,kBAAkB,GAAGA,CAAA,KAAM;EAC/B,IAAIL,gBAAgB,EAAE;IAAC;EAAO;EAC9BA,gBAAgB,GAAGR,KAAK,CAACc,SAAS,CAAC,MAAM;IACvC,IAAIb,KAAK,CAACC,SAAS,IAAIF,KAAK,CAACe,QAAQ,CAAC,CAAC,CAACC,IAAI,CAACC,KAAK,KAAK,MAAM,EAAE;MAC7DR,IAAI,CAAC;QAAEP,SAAS,EAAE;MAAM,CAAC,CAAC;IAC5B;EACF,CAAC,CAAC;AACJ,CAAC;AAED,MAAMY,SAAS,GAAIF,QAAoB,IAAK;EAC1CC,kBAAkB,CAAC,CAAC;EACpBP,SAAS,CAACY,GAAG,CAACN,QAAQ,CAAC;EACvB,OAAO,MAAM;IACXN,SAAS,CAACa,MAAM,CAACP,QAAQ,CAAC;EAC5B,CAAC;AACH,CAAC;AAED,MAAMQ,WAAW,GAAGA,CAAA,KAAMnB,KAAK;;AAE/B;AACA,OAAO,MAAMoB,cAAc,GAAGA,CAAA,KAAmBpB,KAAK;AAEtD,OAAO,MAAMqB,SAAS,GAAGA,CAAA,KACvBvB,oBAAoB,CAACe,SAAS,EAAEM,WAAW,EAAEA,WAAW,CAAC;AAE3D,OAAO,MAAMG,gBAAgB,GAAIrB,SAAkB,IAAW;EAC5D,IAAID,KAAK,CAACC,SAAS,KAAKA,SAAS,EAAE;IAACO,IAAI,CAAC;MAAEP;IAAU,CAAC,CAAC;EAAC;AAC1D,CAAC;AAED,OAAO,MAAMsB,mBAAmB,GAC9BC,IAA2B,IACV;EACjB,MAAMC,EAAE,GAAGrB,UAAU,EAAE;EACvBD,KAAK,CAACuB,IAAI,CAACD,EAAE,CAAC;EACdD,IAAI,GAAGC,EAAE,CAAC;EACVjB,IAAI,CAAC;IAAEN,OAAO,EAAEuB;EAAG,CAAC,CAAC;EACrB,OAAO,MAAM;IACX,MAAME,KAAK,GAAGxB,KAAK,CAACyB,OAAO,CAACH,EAAE,CAAC;IAC/B,IAAIE,KAAK,IAAI,CAAC,EAAE;MAACxB,KAAK,CAAC0B,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;IAAC;IACxCnB,IAAI,CAAC;MAAEN,OAAO,EAAEC,KAAK,CAAC2B,MAAM,GAAG3B,KAAK,CAACA,KAAK,CAAC2B,MAAM,GAAG,CAAC,CAAC,GAAG;IAAK,CAAC,CAAC;EAClE,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useSyncExternalStore","store","state","minimized","systemRinging","barHost","barAnchorY","hosts","nextHostId","listeners","Set","storeUnsubscribe","emit","patch","forEach","listener","ensureStoreWatcher","subscribe","phase","getState","call","add","delete","getSnapshot","getCallUiState","useCallUi","setCallMinimized","setCallSystemRinging","registerCallBarHost","onId","id","push","index","indexOf","splice","next","length","setCallBarAnchor","hostId","y"],"sourceRoot":"../../../../src","sources":["components/VideoCalls/callUiStore.ts"],"mappings":"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","ignoreList":[]}
@@ -40,6 +40,13 @@ export const loadLiveKit = () => {
40
40
  // moving subset across versions, the core package does not.
41
41
  // eslint-disable-next-line @typescript-eslint/no-require-imports
42
42
  const core = require('livekit-client');
43
+ let webrtc = null;
44
+ try {
45
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
46
+ webrtc = require('@livekit/react-native-webrtc');
47
+ } catch {
48
+ // Only needed for CallKit; calls work without it.
49
+ }
43
50
  cached = {
44
51
  Room: core.Room,
45
52
  RoomEvent: core.RoomEvent,
@@ -48,7 +55,8 @@ export const loadLiveKit = () => {
48
55
  VideoPresets: core.VideoPresets,
49
56
  VideoTrack: rn.VideoTrack,
50
57
  AudioSession: rn.AudioSession,
51
- registerGlobals: rn.registerGlobals
58
+ registerGlobals: rn.registerGlobals,
59
+ RTCAudioSession: webrtc?.RTCAudioSession ?? null
52
60
  };
53
61
  } catch {
54
62
  cached = null;
@@ -1 +1 @@
1
- {"version":3,"names":["cached","isLiveKitAvailable","loadLiveKit","undefined","rn","require","core","Room","RoomEvent","Track","ConnectionState","VideoPresets","VideoTrack","AudioSession","registerGlobals","globalsRegistered","ensureLiveKitGlobals","runtime","__resetLiveKitRuntimeForTests"],"sourceRoot":"../../../../src","sources":["components/VideoCalls/livekitRuntime.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAqBA,IAAIA,MAAyC;AAE7C,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAeC,WAAW,CAAC,CAAC,KAAK,IAAI;;AAEvE;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,WAAW,GAAGA,CAAA,KAA6B;EACtD,IAAIF,MAAM,KAAKG,SAAS,EAAE;IACxB,OAAOH,MAAM;EACf;EAEA,IAAI;IACF;IACA,MAAMI,EAAE,GAAGC,OAAO,CAAC,uBAAuB,CAAC;IAC3C;IACA;IACA;IACA;IACA;IACA,MAAMC,IAAI,GAAGD,OAAO,CAAC,gBAAgB,CAAC;IAEtCL,MAAM,GAAG;MACPO,IAAI,EAAED,IAAI,CAACC,IAAI;MACfC,SAAS,EAAEF,IAAI,CAACE,SAAS;MACzBC,KAAK,EAAEH,IAAI,CAACG,KAAK;MACjBC,eAAe,EAAEJ,IAAI,CAACI,eAAe;MACrCC,YAAY,EAAEL,IAAI,CAACK,YAAY;MAC/BC,UAAU,EAAER,EAAE,CAACQ,UAAU;MACzBC,YAAY,EAAET,EAAE,CAACS,YAAY;MAC7BC,eAAe,EAAEV,EAAE,CAACU;IACtB,CAAC;EACH,CAAC,CAAC,MAAM;IACNd,MAAM,GAAG,IAAI;EACf;EAEA,OAAOA,MAAM;AACf,CAAC;AAED,IAAIe,iBAAiB,GAAG,KAAK;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAIC,OAAuB,IAAW;EACrE,IAAIF,iBAAiB,EAAE;IAAC;EAAO;EAC/B,IAAI;IACFE,OAAO,CAACH,eAAe,GAAG,CAAC;EAC7B,CAAC,CAAC,MAAM;IACN;EAAA;EAEFC,iBAAiB,GAAG,IAAI;AAC1B,CAAC;;AAED;AACA,OAAO,MAAMG,6BAA6B,GAAGA,CAAA,KAAY;EACvDlB,MAAM,GAAGG,SAAS;EAClBY,iBAAiB,GAAG,KAAK;AAC3B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["cached","isLiveKitAvailable","loadLiveKit","undefined","rn","require","core","webrtc","Room","RoomEvent","Track","ConnectionState","VideoPresets","VideoTrack","AudioSession","registerGlobals","RTCAudioSession","globalsRegistered","ensureLiveKitGlobals","runtime","__resetLiveKitRuntimeForTests"],"sourceRoot":"../../../../src","sources":["components/VideoCalls/livekitRuntime.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA0BA,IAAIA,MAAyC;AAE7C,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAeC,WAAW,CAAC,CAAC,KAAK,IAAI;;AAEvE;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,WAAW,GAAGA,CAAA,KAA6B;EACtD,IAAIF,MAAM,KAAKG,SAAS,EAAE;IACxB,OAAOH,MAAM;EACf;EAEA,IAAI;IACF;IACA,MAAMI,EAAE,GAAGC,OAAO,CAAC,uBAAuB,CAAC;IAC3C;IACA;IACA;IACA;IACA;IACA,MAAMC,IAAI,GAAGD,OAAO,CAAC,gBAAgB,CAAC;IACtC,IAAIE,MAAW,GAAG,IAAI;IACtB,IAAI;MACF;MACAA,MAAM,GAAGF,OAAO,CAAC,8BAA8B,CAAC;IAClD,CAAC,CAAC,MAAM;MACN;IAAA;IAGFL,MAAM,GAAG;MACPQ,IAAI,EAAEF,IAAI,CAACE,IAAI;MACfC,SAAS,EAAEH,IAAI,CAACG,SAAS;MACzBC,KAAK,EAAEJ,IAAI,CAACI,KAAK;MACjBC,eAAe,EAAEL,IAAI,CAACK,eAAe;MACrCC,YAAY,EAAEN,IAAI,CAACM,YAAY;MAC/BC,UAAU,EAAET,EAAE,CAACS,UAAU;MACzBC,YAAY,EAAEV,EAAE,CAACU,YAAY;MAC7BC,eAAe,EAAEX,EAAE,CAACW,eAAe;MACnCC,eAAe,EAAET,MAAM,EAAES,eAAe,IAAI;IAC9C,CAAC;EACH,CAAC,CAAC,MAAM;IACNhB,MAAM,GAAG,IAAI;EACf;EAEA,OAAOA,MAAM;AACf,CAAC;AAED,IAAIiB,iBAAiB,GAAG,KAAK;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAIC,OAAuB,IAAW;EACrE,IAAIF,iBAAiB,EAAE;IAAC;EAAO;EAC/B,IAAI;IACFE,OAAO,CAACJ,eAAe,GAAG,CAAC;EAC7B,CAAC,CAAC,MAAM;IACN;EAAA;EAEFE,iBAAiB,GAAG,IAAI;AAC1B,CAAC;;AAED;AACA,OAAO,MAAMG,6BAA6B,GAAGA,CAAA,KAAY;EACvDpB,MAAM,GAAGG,SAAS;EAClBc,iBAAiB,GAAG,KAAK;AAC3B,CAAC","ignoreList":[]}
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
 
3
- import { useEffect, useMemo, useRef } from 'react';
3
+ import { useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { Platform } from 'react-native';
5
5
  import { useDispatch, useSelector } from 'react-redux';
6
6
  import { store } from '../../roomStore';
7
7
  import { acceptIncomingCall, declineIncomingCall } from '../../roomStore/callSlice';
8
8
  import { sendCallStateSignal } from '../../networking/callTokenStanza';
9
+ import { terminateActiveCall } from './callActions';
10
+ import { setCallMicEnabled, useCallSession } from './callSessionController';
11
+ import { loadLiveKit } from './livekitRuntime';
12
+ import { setCallSystemRinging } from './callUiStore';
9
13
 
10
14
  /**
11
15
  * Native incoming-call UI (Android ConnectionService / iOS CallKit) via
@@ -16,6 +20,12 @@ import { sendCallStateSignal } from '../../networking/callTokenStanza';
16
20
  * loaded lazily exactly like the LiveKit packages, so hosts that don't
17
21
  * install it get the plain in-app ring screen and nothing breaks.
18
22
  *
23
+ * On iOS every call, incoming or outgoing, is also reported to CallKit for
24
+ * as long as it lasts. That is what puts it in the Dynamic Island / the
25
+ * green status-bar pill when the app is in the background, with the
26
+ * system's own mute and end buttons, and what keeps the call's audio
27
+ * running in the background.
28
+ *
19
29
  * Platform reality, stated plainly:
20
30
  * - Android: full value. A ConnectionService call shows the system
21
31
  * incoming-call screen over the lock screen.
@@ -74,16 +84,31 @@ const toUuid = seed => {
74
84
  const hex = bytes.map(b => b.toString(16).padStart(2, '0')).join('');
75
85
  return [hex.slice(0, 8), hex.slice(8, 12), '4' + hex.slice(13, 16), (parseInt(hex[16], 16) & 0x3 | 0x8).toString(16) + hex.slice(17, 20), hex.slice(20, 32)].join('-');
76
86
  };
87
+ const trace = (...args) => {
88
+ if (__DEV__) {
89
+ console.log('[calls] CallKit:', ...args);
90
+ }
91
+ };
77
92
  export const useCallKeep = () => {
78
93
  const dispatch = useDispatch();
79
94
  const call = useSelector(state => state.call);
95
+ const session = useCallSession();
80
96
  const callKeep = useMemo(() => loadCallKeep(), []);
97
+ const [ready, setReady] = useState(false);
81
98
  const activeUuidRef = useRef(null);
82
- const readyRef = useRef(false);
99
+ // The CallKit call has been answered (from the system screen or in-app).
100
+ const answeredRef = useRef(false);
101
+ const outgoingReportedRef = useRef('none');
102
+ const isIOS = Platform.OS === 'ios';
83
103
 
84
104
  // One-time native setup.
85
105
  useEffect(() => {
86
106
  if (!callKeep) {
107
+ if (isIOS) {
108
+ // The usual reason for "no Dynamic Island": the JS package is there
109
+ // but the binary was built without the RNCallKeep pod.
110
+ trace('unavailable (react-native-callkeep is not linked in this build)');
111
+ }
87
112
  return;
88
113
  }
89
114
  let cancelled = false;
@@ -92,7 +117,12 @@ export const useCallKeep = () => {
92
117
  await callKeep.setup({
93
118
  ios: {
94
119
  appName: 'Ethora',
95
- supportsVideo: true
120
+ supportsVideo: true,
121
+ maximumCallGroups: '1',
122
+ maximumCallsPerCallGroup: '1',
123
+ // Our calls are not phone calls: keep them out of the Phone
124
+ // app's Recents, whose entries would dial back into nowhere.
125
+ includesCallsInRecents: false
96
126
  },
97
127
  android: {
98
128
  alertTitle: 'Permissions required',
@@ -111,28 +141,35 @@ export const useCallKeep = () => {
111
141
  return;
112
142
  }
113
143
  callKeep.setAvailable?.(true);
114
- readyRef.current = true;
115
- } catch {
144
+ trace('ready');
145
+ setReady(true);
146
+ } catch (error) {
147
+ trace('setup failed', error);
116
148
  // Host didn't grant phone-account permission, or the module isn't
117
149
  // linked. The in-app ring screen still works, so stay quiet.
118
- readyRef.current = false;
150
+ setReady(false);
119
151
  }
120
152
  })();
121
153
  return () => {
122
154
  cancelled = true;
123
155
  };
124
- }, [callKeep]);
156
+ }, [callKeep, isIOS]);
125
157
 
126
- // Bridge native answer/end actions back into Redux.
158
+ // Bridge native actions back into the call.
127
159
  useEffect(() => {
128
160
  if (!callKeep) {
129
161
  return;
130
162
  }
131
163
  const onAnswer = () => {
164
+ answeredRef.current = true;
132
165
  // The user answered from the system screen, which on Android may
133
166
  // mean the app was not even in the foreground.
134
167
  callKeep.backToForeground?.();
135
- if (store.getState().call.direction === 'incoming') {
168
+ // Only from the ring: CallKit also reports the answer we make on its
169
+ // behalf after an in-app accept, and re-accepting then would drop an
170
+ // in-progress call back to 'connecting'.
171
+ const current = store.getState().call;
172
+ if (current.direction === 'incoming' && current.phase === 'ringing-incoming') {
136
173
  dispatch(acceptIncomingCall());
137
174
  }
138
175
  };
@@ -144,54 +181,190 @@ export const useCallKeep = () => {
144
181
  if (snapshot.direction === 'incoming' && snapshot.phase === 'ringing-incoming') {
145
182
  sendCallStateSignal('declined');
146
183
  dispatch(declineIncomingCall());
184
+ return;
185
+ }
186
+ // Ended from the Dynamic Island, the lock screen or a headset.
187
+ if (snapshot.phase === 'error') {
188
+ return;
189
+ }
190
+ terminateActiveCall(snapshot.phase === 'requesting' ? 'cancelled' : 'ended');
191
+ };
192
+
193
+ // The system mute button (Dynamic Island, lock screen, CarPlay).
194
+ const onMuted = ({
195
+ muted
196
+ }) => {
197
+ void setCallMicEnabled(!muted);
198
+ };
199
+
200
+ // Another call (e.g. a phone call) put ours on hold: stop sending audio.
201
+ const onHold = ({
202
+ hold
203
+ }) => {
204
+ if (hold) {
205
+ void setCallMicEnabled(false);
206
+ }
207
+ };
208
+
209
+ // CallKit owns the iOS audio session: WebRTC may only start its audio
210
+ // unit once CallKit has activated the session.
211
+ const onAudioActivated = () => {
212
+ try {
213
+ loadLiveKit()?.RTCAudioSession?.audioSessionDidActivate?.();
214
+ } catch {
215
+ // Older webrtc builds manage the session on their own.
216
+ }
217
+ };
218
+ const onAudioDeactivated = () => {
219
+ try {
220
+ loadLiveKit()?.RTCAudioSession?.audioSessionDidDeactivate?.();
221
+ } catch {
222
+ // noop
147
223
  }
148
224
  };
149
225
  callKeep.addEventListener('answerCall', onAnswer);
150
226
  callKeep.addEventListener('endCall', onEnd);
227
+ callKeep.addEventListener('didPerformSetMutedCallAction', onMuted);
228
+ callKeep.addEventListener('didToggleHoldCallAction', onHold);
229
+ callKeep.addEventListener('didActivateAudioSession', onAudioActivated);
230
+ // CallKit rejected or dropped our calls (e.g. a build without the voip
231
+ // background mode): there is nothing to end any more.
232
+ const onReset = () => {
233
+ trace('provider reset');
234
+ };
235
+ callKeep.addEventListener('didResetProvider', onReset);
236
+ // The system's verdict on displayIncomingCall ("Unentitled" means the
237
+ // app lacks the voip background mode).
238
+ const onDisplayed = ({
239
+ error,
240
+ errorCode
241
+ }) => {
242
+ trace('incoming call shown', error ? `failed: ${errorCode || ''} ${error}` : 'ok');
243
+ // CallKit refused it (Do Not Disturb, unentitled...): bring the
244
+ // in-app ring card back so the call can still be answered.
245
+ if (error) {
246
+ setCallSystemRinging(false);
247
+ }
248
+ };
249
+ callKeep.addEventListener('didDisplayIncomingCall', onDisplayed);
250
+ callKeep.addEventListener('didDeactivateAudioSession', onAudioDeactivated);
151
251
  return () => {
152
252
  callKeep.removeEventListener('answerCall');
153
253
  callKeep.removeEventListener('endCall');
254
+ callKeep.removeEventListener('didPerformSetMutedCallAction');
255
+ callKeep.removeEventListener('didToggleHoldCallAction');
256
+ callKeep.removeEventListener('didActivateAudioSession');
257
+ callKeep.removeEventListener('didDeactivateAudioSession');
258
+ callKeep.removeEventListener('didResetProvider');
259
+ callKeep.removeEventListener('didDisplayIncomingCall');
154
260
  };
155
261
  }, [callKeep, dispatch]);
262
+ const displayName = call.roomName || 'Ethora';
263
+ const isRinging = call.direction === 'incoming' && call.phase === 'ringing-incoming';
264
+ const isLive = call.phase === 'connecting' || call.phase === 'in-call';
265
+ const isOutgoing = call.direction === 'outgoing';
266
+ const peerConnected = session.anchorAt !== null;
156
267
 
157
- // Show / dismiss the native screen as the call state changes.
268
+ // Report the call to the system as its state changes.
158
269
  useEffect(() => {
159
- if (!callKeep || !readyRef.current) {
270
+ if (!callKeep || !ready) {
160
271
  return;
161
272
  }
162
- const isRinging = call.direction === 'incoming' && call.phase === 'ringing-incoming';
163
- if (isRinging && !activeUuidRef.current) {
273
+ const release = () => {
274
+ if (!activeUuidRef.current) {
275
+ return;
276
+ }
277
+ try {
278
+ callKeep.endCall(activeUuidRef.current);
279
+ } catch {
280
+ // Screen already gone.
281
+ }
282
+ activeUuidRef.current = null;
283
+ answeredRef.current = false;
284
+ outgoingReportedRef.current = 'none';
285
+ };
286
+ if (call.phase === 'idle' || call.phase === 'error') {
287
+ release();
288
+ return;
289
+ }
290
+ if (isRinging) {
291
+ if (activeUuidRef.current) {
292
+ return;
293
+ }
164
294
  const uuid = toUuid(call.callId || call.roomJid || String(Date.now()));
165
295
  activeUuidRef.current = uuid;
296
+ answeredRef.current = false;
297
+ // iOS: the system banner is the ring UI (Telegram-style); the in-app
298
+ // card would only cover the screen under it.
299
+ if (isIOS) {
300
+ setCallSystemRinging(true);
301
+ }
166
302
  try {
167
- callKeep.displayIncomingCall(uuid, call.peerXmppUsername || call.roomName || 'Ethora', call.roomName || undefined, 'generic', call.kind === 'video');
303
+ callKeep.displayIncomingCall(uuid, displayName, displayName, 'generic', call.kind === 'video');
168
304
  } catch {
169
305
  activeUuidRef.current = null;
306
+ setCallSystemRinging(false);
170
307
  }
171
308
  return;
172
309
  }
173
310
 
174
- // Any exit from ringing (answered in-app, declined, peer cancelled)
175
- // must tear the system screen down or it hangs around ringing.
176
- if (!isRinging && activeUuidRef.current && call.phase !== 'connecting' && call.phase !== 'in-call') {
311
+ // iOS: an outgoing call is a CallKit call from the first ring, so it
312
+ // shows in the Dynamic Island even before the peer answers.
313
+ if (isIOS && isOutgoing && !activeUuidRef.current && callKeep.startCall) {
314
+ // Unique per call: CallKit refuses a UUID it has seen before, and
315
+ // the callId only arrives with the token.
316
+ const uuid = toUuid(`${call.roomJid || ''}|${call.startedAt || Date.now()}`);
317
+ activeUuidRef.current = uuid;
318
+ outgoingReportedRef.current = 'none';
319
+ trace('startCall', uuid);
177
320
  try {
178
- callKeep.endCall(activeUuidRef.current);
321
+ callKeep.startCall(uuid, displayName, displayName, 'generic', call.kind === 'video');
179
322
  } catch {
180
- // Screen already gone.
323
+ activeUuidRef.current = null;
181
324
  }
182
- activeUuidRef.current = null;
325
+ return;
326
+ }
327
+ const uuid = activeUuidRef.current;
328
+ if (!uuid) {
329
+ return;
330
+ }
331
+ if (isIOS && isOutgoing) {
332
+ if (peerConnected && outgoingReportedRef.current !== 'connected') {
333
+ outgoingReportedRef.current = 'connected';
334
+ callKeep.reportConnectedOutgoingCallWithUUID?.(uuid);
335
+ } else if (isLive && !peerConnected && outgoingReportedRef.current === 'none') {
336
+ outgoingReportedRef.current = 'connecting';
337
+ callKeep.reportConnectingOutgoingCallWithUUID?.(uuid);
338
+ }
339
+ return;
183
340
  }
184
- if (call.phase === 'idle' && activeUuidRef.current) {
341
+
342
+ // Incoming, accepted with the in-app button: tell CallKit, or its
343
+ // screen keeps ringing on top of the call.
344
+ if (isIOS && isLive && !answeredRef.current) {
345
+ answeredRef.current = true;
185
346
  try {
186
- callKeep.endCall(activeUuidRef.current);
347
+ callKeep.answerIncomingCall?.(uuid);
187
348
  } catch {
188
349
  // noop
189
350
  }
190
- activeUuidRef.current = null;
191
351
  }
192
- }, [callKeep, call.direction, call.phase, call.callId, call.roomJid, call.roomName, call.peerXmppUsername, call.kind]);
352
+ }, [callKeep, ready, isIOS, isRinging, isLive, isOutgoing, peerConnected, displayName, call.phase, call.callId, call.roomJid, call.startedAt, call.kind]);
193
353
 
194
- // Nothing to clean up on unmount beyond the active screen: this hook
354
+ // Keep the system mute button in step with ours.
355
+ useEffect(() => {
356
+ const uuid = activeUuidRef.current;
357
+ if (!callKeep || !ready || !isIOS || !uuid || !isLive) {
358
+ return;
359
+ }
360
+ try {
361
+ callKeep.setMutedCall?.(uuid, !session.micOn);
362
+ } catch {
363
+ // noop
364
+ }
365
+ }, [callKeep, ready, isIOS, isLive, session.micOn]);
366
+
367
+ // Nothing to clean up on unmount beyond the active call: this hook
195
368
  // lives for the lifetime of the provider.
196
369
  useEffect(() => () => {
197
370
  if (callKeep && activeUuidRef.current) {
@@ -202,9 +375,5 @@ export const useCallKeep = () => {
202
375
  }
203
376
  }
204
377
  }, [callKeep]);
205
-
206
- // iOS-only note kept as a runtime no-op so the import isn't unused when
207
- // the platform check is tree-shaken in release builds.
208
- void Platform.OS;
209
378
  };
210
379
  //# sourceMappingURL=useCallKeep.js.map